我想根据用户隐藏SharePoint 2010列表/库上下文菜单。

我使用的是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 ID上下文菜单,以检查它是否正确的WebPart以隐藏上下文菜单。

我能在使用此代码选择WebPart后找到WebPart ID。

 var listId = SP.ListOperation.Selection.getSelectedList();  
.

var ctxCur = GetCurrentCtx();
var SPGridViewGuid = ctxCur.listName;
.

但如果我单击“v”符号,请在选择webparts返回null中。

是否有任何方法可以找到所选WebPart ID的上下文菜单。 所以它解决了我的问题。

有帮助吗?

解决方案

那是怎么样?

 $('.s4-ctx').css('display','none');
.

它将隐藏显示上下文菜单的按钮。


如果需要隐藏上下文菜单,只能使用具有指定ID的Web部件,您需要使用:

$("div[webpartid='85c13a33-57a3-456b-a19b-c68c97756184'] .s4-ctx").css('display','none');
.


如果要删除菜单项,则为EX。“提醒我”添加此脚本覆盖标准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")
.

其他提示

您未使用Hidecustomaction的任何原因?

这里是msdn。

这里是用于查找正确组的资源

终于解决了我的问题

我增强了“安德鲁”脚本以制作全功能。

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解决方案仅适用于特定页面。如果一个人创建一个新的视图,这将无法正常工作。

@kavalirakesh和@andrew答复部分适合我。 var ctxcur= listContext;在listContext上抛出异常是未定义的。 相反,我使用getcurrentctx()来获取ClientContext。

但是当我单击页面右上角的设置Cog时,我正在收到以下JavaScript错误。 “数据获取发生错误。请刷新页面并重试。”

我的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>
.

客户端连接为null,在我可以调用getcurrentctx()之前,我必须加载sp.js。 我曾经得到的JavaScript错误也消失了。 这比改变Core.js文件更好的解决方案。

许可以下: CC-BY-SA归因
scroll top