2012-07-05 19 views
5

Tengo un script JS personalizado que cargo en SharePoint y tengo problemas para ejecutar mi método init después de que SP finaliza su propia inicialización.Ejecutar la función de JavaScript después de inicializar SharePoint

_spBodyOnLoadFunctionNames

me trataron de la manera "oficial" primero y ha añadido mi nombre de función a la lista de funciones ejecutadas después de la carga del cuerpo con _spBodyOnLoadFunctionNames.push("myInitMethod"); pero que no dispara en cada carga de la página, no se puede confiar en ese.

ExecuteOrDelayUntilScriptLoaded

Luego trató de utilizar la función ExecuteOrDelayUntilScriptLoaded(myInitMethod, "sp.js"); pero no se dispara en cada carga de página tampoco.

Ambas formas funcionan, pero no siempre. Supongo que mi script se carga a veces antes de el SP se inicializa. Esto sucede principalmente en Chrome pero también en IE.

¿Cómo puedo asegurarme de que mi script se ejecuta cuando SP está listo?


Nota: Hay un comportamiento interesante cuando se carga la página y el objeto SP no se ha inicializado completamente (las funciones registradas en ExecuteOrDelayUntilScriptLoaded no ha sido llamado): Tan pronto como haga clic en el "Navegar Arriba "anclar en la página (donde se puede ver el hiarchy de los subsitios) se cargan los siguientes archivos y se llama a mi función init (registrada en ExecuteOrDelayUntilScriptLoaded).

  • core.debug.js
  • sp.core.debug.js
  • ScriptResx.ashx
  • sp.ui.dialog.debug.js
  • sp.runtime.debug.js
  • sp.debug.js

Así que todo está bien después de eso clic - pero ¿por qué no en pageload como debe ser?

Respuesta

4

Parece que este comportamiento está relacionado con algunos problemas entre SP 2010 y Google Chrome. No tengo este problema en otros navegadores.

2

Hola, me encontré con tu pregunta cuando estaba buscando una forma de retrasar mi carga de JavaScript hasta que sp.js lo haya hecho.

El motivo por el que el código que proporcionó funciona algunas veces es porque (algunas veces) SharePoint no inicializa todo su código base. Este es un gran problema en Google Chrome, pero también puede ocurrir en otros navegadores (que no sean IE). Para solucionar ese tema en particular se puede hacer algo como esto:

if (typeof(_spBodyOnLoadWrapper)!='undefined'){_spBodyOnLoadWrapper();} 

puse la mía dentro de $ (document) ready().

Y gracias por responder mi pregunta :)

Cuestiones relacionadas