Question

Je veux masquer le menu contextuel de liste / de la bibliothèque SharePoint 2010 en fonction des utilisateurs.

J'utilise ci-dessous 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();  
         });
  });

Il masque le menu de la mise au point ou de la flou ou de la souris sur le menu contextuel.

Le menu contextuel génère de manière dynamique par le fichier core.js

Je dois ajouter le script lorsque le menu contextuel est créé.

J'ai donc besoin de trouver l'événement pour le menu contextuel

Entrez la description de l'image ici

Comment trouver l'événement de clic et ajouter mon code personnalisé.

avec "Andrew" J'ai trouvé une bonne solution et gérer l'événement du menu contextuel

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

Son amende fonctionnel mais son menu contextuel de masquage pour tous les webparts. J'ai besoin de trouver le menu contextuel sélectionné WebPart ID pour vérifier est-ce idéal WebPart pour masquer le menu contextuel.

Je suis capable de trouver l'identifiant WebPart après une fois que j'ai sélectionné WebPart avec ce code.

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

ou

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

Mais si je clique sur le symbole "V" sans sélection de la sélection de WebParts son retour NULL.

Y a-t-il un moyen de trouver le menu contextuel d'identifiant WebPart sélectionné. donc sa résout mon problème.

Était-ce utile?

La solution

Et ça?

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

Il masquera les boutons qui affichent le menu contextuel.


Si vous devez masquer le menu contextuel uniquement à partir de la partie Web avec ID spécifié, vous devez utiliser:

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


Si vous souhaitez supprimer l'élément de menu, pour ex."Alertez-moi" Ajouter ce script qui remplace la fonction Standard Core.Js "MenuHTC_Show" et cache l'élément de menu du menu contextuel dans WebPart spécifié:

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

Autres conseils

Une raison pour laquelle vous n'utilisez pas une hidécustomaction?

ici est le MSDN pour cela.

et ici est une ressource permettant de trouver les bons groupes

Enfin, cela résoudra mon problème

J'ai amélioré "Andrew" script pour faire du fonctionnement complet.

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();

    }

    };
}

Je voulais mettre en œuvre la même chose sur SharePoint 2013. La solution CSS ne fonctionne que pour une page particulière.Si on crée une nouvelle vue, cela ne fonctionnera pas.

@Kavalirakesh et @andrew Réponse ont travaillé partiellement pour moi. le var ctxcur= listContext;Lancer une exception sur ListContext est indéfinie. Au lieu de cela, j'ai utilisé GetCurrentCtX () pour obtenir clientContext.

Mais je recevais l'erreur JavaScript suivante lorsque je cliquais sur le bouton de réglage en haut à droite de la page. "Une erreur s'est produite avec la récupération des données. Veuillez actualiser la page et réessayer."

Mon code JavaScript ajouté via un contrôle de délégué sur la page principale page.

<?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>

Le contrôle de l'utilisateur "ECBDELEGATECONTROL.ASCX" avait le script ci-dessous

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

Le clientContext était NULL et je devais charger les sp.js avant que je puisse appeler getcurrentCTX (). L'erreur JavaScript que j'ai utilisée est également partie. C'est une meilleure solution que la modification du fichier core.js.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top