sharepoint 2010 상황에 맞는 메뉴 이벤트 처리기
-
10-12-2019 - |
문제
사용자를 기반으로 sharepoint 2010 목록/라이브러리 상황에 맞는 메뉴를 숨기고 싶습니다.
나는 아래 자바 스크립트를 사용하고 있습니다
$(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를 찾아야 합니다.
이 코드로 웹파트를 선택하면 웹파트 ID를 찾을 수 있습니다.
var listId = SP.ListOperation.Selection.getSelectedList();
또는
var ctxCur = GetCurrentCtx();
var SPGridViewGuid = ctxCur.listName;
하지만 웹 파트를 선택하지 않고 "v" 기호를 클릭하면 null이 반환됩니다.
선택한 웹파트 ID를 컨텍스트 메뉴에서 찾을 수 있는 방법이 있습니까?그래서 내 문제가 해결되었습니다.
해결책
그건 어때?
$('.s4-ctx').css('display','none');
상황에 맞는 메뉴를 표시하는 버튼을 숨깁니다.
지정된 ID가 있는 웹 파트에서만 상황에 맞는 메뉴를 숨기려면 다음을 사용해야 합니다.
$("div[webpartid='85c13a33-57a3-456b-a19b-c68c97756184'] .s4-ctx").css('display','none');
예를 들어 메뉴 항목을 제거하려는 경우"Alert Me"는 표준 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")
다른 팁
마침내 이것이 내 문제를 해결합니다
"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 솔루션은 특정 페이지에서만 작동합니다.새로운 뷰를 생성하면 작동하지 않습니다.
@kavalirakesh와 @Andrew 답변이 부분적으로 도움이 되었습니다.var ctxCur = listcontext;listcontext에서 예외가 발생했습니다. 정의되지 않았습니다.대신 GetCurrentCtx()를 사용하여 ClientContext를 가져왔습니다.
그런데 페이지 오른쪽 상단의 톱니바퀴 설정을 클릭할 때 다음과 같은 자바스크립트 오류가 발생했습니다."데이터를 가져오는 중에 오류가 발생했습니다.페이지를 새로 고치고 다시 시도하십시오."
마스터 페이지 헤드의 Delegate Control을 통해 추가된 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를 로드해야 했습니다.제가 받던 자바스크립트 오류도 사라졌습니다.이것은 core.js 파일을 변경하는 것보다 훨씬 더 나은 솔루션입니다.