Вопрос

Я хочу скрыть контекстное меню списка / библиотеки 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")
.

Это работает нормально, но его скрытие контекстного меню для всех веб-панелей. Мне нужно найти контекстное меню выбранного ID WebPart ID, чтобы проверить, это правильный WebPart, чтобы скрыть контекстное меню.

Я могу найти идентификатор WebPart после того, как я выберет WebPart с этим кодом.

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

или

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

Но если я нажму на символ «V», выбирая веб-панели, его возвращаемый NULL.

Есть ли способ найти контекстное меню выбранного ID WebPart ID. Так что это решает мою проблему.

Это было полезно?

Решение

Как насчет этого?

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

Он будет скрывать кнопки, которые показывают контекстное меню.


Если вам нужно скрыть контекстное меню только из веб-части с указанным идентификатором, необходимым для использования:

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


Если вы хотите удалить пункт меню, для EX.«Оповещение ко мне» Добавьте этот скрипт, который переопределяет стандартные функции Core.js «Menuhtc_show» и скрывает пункт меню из контекстного меню в указанном веб-панели:

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")
.

Другие советы

Есть причина, по которой вы не используете хрудоустановление?

Здесь - это 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 работает только для определенной страницы.Если кто-то создает новый взгляд, это не будет работать.

@kavalirakeh и @andrew angine работал частично для меня. var ctxcur= listcontext;Был бросать исключение на ListContext не определено. Вместо этого я использовал getcurrentctx (), чтобы получить ClientContext.

Но я получал следующую ошибку JavaScript, когда я нажал на настроек 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>
.

КлиентContext был NULL, и мне пришлось загрузить SP.JS, прежде чем я смогу позвонить GetCurrentCTX (). Ошибка JavaScript, которую я использовал, чтобы получить, также ушла. Это намного лучшее решение, чем изменение файла core.js.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top