Обработчик событий меню контекстного меню SharePoint 2010
-
10-12-2019 - |
Вопрос
Я хочу скрыть контекстное меню списка / библиотеки 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")
. Другие советы
Наконец это решает мою проблему
Я улучшил сценарий «Эндрю», чтобы сделать полный функционал.
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.