문제

사용자를 기반으로 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 파일에 의해 동적으로 생성됩니다.

컨텍스트 메뉴가 생성될 때 스크립트를 추가해야 합니다.

그래서 컨텍스트 메뉴에 대한 이벤트를 찾아야 해요

enter image description here

클릭 이벤트를 찾고 내 맞춤 코드를 추가하는 방법.

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

다른 팁

HideCustomAction을 사용하지 않는 이유가 무엇입니까?

여기 이에 대한 MSDN입니다.

그리고 여기 올바른 그룹을 찾기 위한 리소스입니다.

마침내 이것이 내 문제를 해결합니다

"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 파일을 변경하는 것보다 훨씬 더 나은 솔루션입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top