o sharepoint 2010 menu de contexto do manipulador de eventos
-
10-12-2019 - |
Pergunta
eu quero esconder lista do sharepoint 2010/biblioteca menu de contexto baseado em usuários.
eu estou usando 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();
});
});
É ocultar o menu apenas no foco ou borrão ou passar o mouse no menu de contexto.
o menu de contexto é gerar dinamicamente pelo core.js arquivo
eu preciso adicionar o script quando o menu de contexto é criado.
por isso preciso de localizar o evento para o menu de contexto
como encontrar o evento de clique e adicione o meu código personalizado.
com "Andrew" eu achei uma boa solução para lidar com o menu de contexto do evento
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")
seu trabalho bem, mas a sua ocultar o menu de contexto para todas as webparts.eu preciso encontrar o menu de contexto selecionado webpart de identificação para verificação é de direito webpart para ocultar o menu de contexto.
eu sou capaz de encontrar a peça web de identificação depois de uma vez que eu selecionar webpart com este código.
var listId = SP.ListOperation.Selection.getSelectedList();
ou
var ctxCur = GetCurrentCtx();
var SPGridViewGuid = ctxCur.listName;
mas se eu clicar em "v" e o símbolo com o limite de selecionar o webparts seu retorno nulo.
existe alguma maneira para encontrar o menu de contexto selecionado webpart de identificação.então, seus resolve o meu problema.
Solução
O que sobre isso?
$('.s4-ctx').css('display','none');
Ele irá esconder os botões que mostram menu de contexto.
Se você precisa ocultar o menu de contexto apenas de parte da web com o id especificado que você precisa para usar:
$("div[webpartid='85c13a33-57a3-456b-a19b-c68c97756184'] .s4-ctx").css('display','none');
Se você deseja remover o item do menu, por ex."Alerta-Me" adicionar esse script que substitui padrão core.js função "MenuHtc_show" e oculta o item de menu a partir do menu de contexto especificado webpart:
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")
Outras dicas
finalmente, resolver o meu problema
eu avançado "Andrew" script completo e funcional.
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();
}
};
}
Eu queria implementar o mesmo no SharePoint 2013.O CSS solução só funciona para uma página específica.Se cada um cria uma nova vista isso não vai funcionar.
@kavalirakesh e @Andrew resposta funcionou parcialmente para mim.o var ctxCur = listcontext;estava jogando exceção no listcontext é indefinido.Em vez disso, eu usei GetCurrentCtx() para obter ClientContext.
Mas eu estava recebendo o seguinte erro javascript quando eu estava clicando sobre a Configuração de roda dentada, no canto superior direito da página."Ocorreu um erro com os dados de busca.Por favor, atualize a página e tente novamente."
Meu código javascript adicionado através de um Delegado de Controlo na página principal cabeça.
<?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>
O controlo de utilizador "ECBDelegateControl.ascx" tinha o alforje abaixo
<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>
O ClientContext foi nulo, e eu tinha que carregar o sp.js antes que eu possa chamar de GetCurrentCtx().O erro de javascript eu costumava ter também está desaparecido.Isso é muito melhor solução do que mudar core.js arquivo.