ExecuteOrDelayUntilScriptLoaded com sp.js quando no modo de depuração Objeto esperado
-
10-12-2019 - |
Pergunta
Atualmente tenho um arquivo JavaScript que é carregado nas minhas páginas do SharePoint.
jQuery(document).ready(function() {
ExecuteOrDelayUntilScriptLoaded(myfunction(), "sp.js");
});
myfunction = function(){
/*Do something here.*/
};
Agora o JavaScript funciona perfeitamente, porém em uma página de lista, evita que a faixa de opções carregue a guia Lista.No console recebo o erro abaixo.
SCRIPT5007:Objeto esperado init.debug.js, linha 5153 Erro de caractere 5.
Mesmo se eu comentar toda a função para que fique exatamente como acima, ainda recebo a mensagem de erro.
Percebi que se eu alterar "sp.js" para "sp.debug.js" não recebo a mensagem de erro.Observando os scripts carregados na página, isso faz sentido, pois sp.debug.js é carregado e não sp.js.Eu realmente não quero colocar sp.debug.js no código javascript, pois quando ele chegar aos servidores de produção, eles não usarão sp.debug.js.Nunca percebi que isso aconteceu antes com qualquer código que tenha ExecuteOrDelayUntilScriptLoaded(jsfunction(), "sp.js").Existe uma maneira de fazê-lo funcionar em ambos os ambientes, como com uma instrução #ifdebug em javascript?Ou alguma outra ideia.
Solução
Você está usando ExecuteOrDelayUntilScriptLoaded errado, você deve usar o nome da função e não executá-la.
Assim:
jQuery(document).ready(function() {
ExecuteOrDelayUntilScriptLoaded(myfunction, "sp.js");
});
Observe que removi o "()" da minha função.Agora deve funcionar como esperado
Outras dicas
Não use jQuery para tais fins; em vez disso, use recursos incorporados do SharePoint:
var myFunction = function(){
ExecuteOrDelayUntilScriptLoaded(yourfunction, "sp.js");
}
_spBodyOnLoadFunctionNames.push("myFunction");
ou uma função anônima
_spBodyOnLoadFunctionNames.push(function(){
ExecuteOrDelayUntilScriptLoaded(yourfunction, "sp.js");
});