SharePoint 2010コンテキストメニューイベントハンドラ
-
10-12-2019 - |
質問
ユーザーに基づくSharePoint 2010 List / Libraryのコンテキストメニューを非表示にしたい。
私は以下のJavaScript を使っています
$(document).ready(function(){
$('.ms-MenuUIPopupBody').live('blur', function() {
var elm = $("div.ms-MenuUIULItem a:contains('View in Browser')");
elm.remove();
$("div.ms-MenuUIULItem a:contains('Edit in Browser')").remove();
});
});
.
コンテキストメニューのフォーカスまたはぼかしまたはマウスオーバー上のメニューを非表示にしています。
Core.jsファイルによって動的に生成しています
コンテキストメニューの作成時にスクリプトを追加する必要があります。
では、コンテキストメニューのイベントを見つける必要があります
クリックイベントを見つけてカスタムコードを追加する方法
"Andrew"では良い解決策を見つけ、コンテキストメニューイベントを処理する
var _MenuHtc_show;
function OverrideMenuHtc_show()
{
_MenuHtc_show = window.MenuHtc_show;
window.MenuHtc_show= function (m,r,fr,ft,yoff) {
_MenuHtc_show(m,r,fr,ft,yoff);
var elm = $(".ms-MenuUIULItem[text='Alert Me']");
elm.remove();
};
}
ExecuteOrDelayUntilScriptLoaded(OverrideMenuHtc_show, "core.js")
.
その作業罰金は、すべてのWebPartsの非隠しコンテキストメニューです。 チェックするコンテキストメニューを見つける必要があります。チェックするのは、コンテキストメニューを非表示にするWebPartが正しいWebPartです。
このコードでWebPartを選択した後にWebPart IDを見つけることができます。
var listId = SP.ListOperation.Selection.getSelectedList();
.
または
var ctxCur = GetCurrentCtx();
var SPGridViewGuid = ctxCur.listName;
.
しかし、WebPartsを選択した状態で「v」シンボルをクリックした場合、そのresoutn null。
選択したWebPart IDを選択したコンテキストメニューを見つける方法はあります。 だからその問題を解決します。
解決
それはどうですか?
$('.s4-ctx').css('display','none');
.
コンテキストメニューを表示するボタンを非表示にします。
指定されたIDを使用してWebパーツからコンテキストメニューを非表示にする必要がある場合は、
$("div[webpartid='85c13a33-57a3-456b-a19b-c68c97756184'] .s4-ctx").css('display','none');
.
EXのメニュー項目を削除したい場合。"alert me"標準core.js関数 "menuhtc_show"をオーバーライドするこのスクリプトを追加し、指定されたWebPartのコンテキストメニューからメニュー項目を隠します。
var _MenuHtc_show;
function OverrideMenuHtc_show()
{
_MenuHtc_show = window.MenuHtc_show;
window.MenuHtc_show= function (m,r,fr,ft,yoff) {
_MenuHtc_show(m,r,fr,ft,yoff);
var items = $("div[webpartid='85c13a33-57a3-456b-a19b-c68c97756184'] .ms-MenuUIULItem[text='Alert Me']");
$(items).css('display','none');
};
}
ExecuteOrDelayUntilScriptLoaded(OverrideMenuHtc_show, "core.js")
. 他のヒント
最終的にこれは私の問題を解決する
私は完全な機能を完全にするために「Andrew」スクリプトを強化しました。
ExecuteOrDelayUntilScriptLoaded(OverrideMenuHtc_show, "core.js");
var _MenuHtc_show;
function OverrideMenuHtc_show() {
_MenuHtc_show = window.MenuHtc_show;
window.MenuHtc_show = function (m, r, fr, ft, yoff) {
_MenuHtc_show(m, r, fr, ft, yoff);
var ctxCur = listcontext;
//list or library GUID
var listid = ctxCur.listName;
if(listid =='your list\library GUID')
{
var elm = $(".ms-MenuUIULItem[text='Alert Me']");
elm.remove();
}
};
}
. SharePoint 2013で同じことを実装したいと思いました。 CSSソリューションは、特定のページに対してのみ機能します。これは機能しません。
@カバリラケシュと@andrewの答えは私にとって部分的に働いた。 var ctxcur= listContext。ListContextで例外を投げていましたが、未定義です。 代わりに、getCurrentCtx()を使用してClientContextを取得しました。
しかし、ページの右上の設定COGをクリックしていたときに、次のJavaScriptエラーが発生しました。 「データフェッチでエラーが発生しました。ページを更新して再試行してください。 "
マイジャーブスクリプトコードは、マスターページヘッドのデリゲートコントロールを介して追加されました。
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Control Id="AdditionalPageHead"
Sequence="90"
ControlSrc="~/_CONTROLTEMPLATES/15/MyCustomFolder/ECBDelegateControl.ascx" />
</Elements>
.
ユーザ制御「EcbDelegateControl.ascx」はスクリプトを下回っていた
<script type="text/javascript" src="../../../_layouts/15/MyScripts/Script/jquery-3.1.1.min.js"></script>
<script type="text/javascript">
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function () {
ExecuteOrDelayUntilScriptLoaded(OverrideMenuHtc_show, "core.js");
});
function OverrideMenuHtc_show() {
var ctx = GetCurrentCtx();
var listName = ctx.ListTitle;
if (listName == 'My First List' ||
listName == 'My Second List') {
var _MenuHtc_show;
_MenuHtc_show = window.MenuHtc_show;
window.MenuHtc_show = function (m, r, fr, ft, yoff) {
_MenuHtc_show(m, r, fr, ft, yoff);
var elm = $("li.ms-core-menu-item[text='Delete Item']");
elm.remove();
}
};
}
</script>
.
ClientContextはNULLで、getCurrentCtx()を呼び出す前にsp.jsをロードする必要がありました。 私が取得したJavaScriptエラーもなくなりました。 これは、core.jsファイルを変更するよりもはるかに優れたソリューションです。