2013-06-05 11 views
26

Disclaimer: Non ho esperienza con SharePoint2013.SharePoint 2013 aggiungi javascript dopo il caricamento di tutta la pagina

Ho un problema - Devo includere/attivare alcune funzioni javascript dopo che l'intera pagina è stata caricata. Ho provato ad ascoltare gli eventi DOMDocumentReady e window.load, ma sharepoint rende il resto della pagina dopo tali eventi.

La mia domanda è: cosa dovrei fare per essere in grado di eseguire uno script dopo che è stata visualizzata un'intera pagina con ajax. Inoltre ho notato che la navigazione della pagina è basata sulla parte hash (#). Ovviamente devo rilevare anche quel momento.

Qualsiasi aiuto o anche collegamento alla pagina destra nella documentazione sarebbe fantastico!

+0

Si sta utilizzando jQuery per attivare le richieste ajax o si tratta di un caso speciale di SharePoint? – Bloafer

+0

Devo integrare la libreria commerciale di terze parti, che si aspetta che nel momento in cui viene caricato, sia presente tutto l'html. All'inizio non farò richieste di ajax. Inoltre devo allegare listener di eventi su alcuni link, ecc. –

+0

Ma cosa stai usando per attivare le richieste Ajax? – Bloafer

risposta

55

Hai ragione, MOLTE cose accadono sulla pagina dopo $ (document) .ready(). Il 2013 fornisce alcune opzioni.

1) Script on Demand:. (Caricare un file js poi eseguire il mio codice)

function stuffThatRequiresSP_JS(){ 
    //your code 
} 

SP.SOD.executeFunc("sp.js")

2) di ritardo fino caricato (attendere che un file js, quindi eseguire)

function stuffToRunAfterSP_JS(){ 
    //your code 
} 
ExecuteOrDelayUntilScriptLoaded(stuffToRunAfterSP_JS, "sp.js") 

3) carico dopo altre cose finiture

function runAfterEverythingElse(){ 
    // your code 
} 
_spBodyOnLoadFunctionNames.push("runAfterEverythingElse"); 

Fonti:

executeFunc: http://msdn.microsoft.com/en-us/library/ff409592(v=office.14).aspx

ExecuteOrDelayUntilScriptLoaded: http://msdn.microsoft.com/en-us/library/ff411788(v=office.14).aspx

riesci a trovare una fonte sul _spBodyOnLoadFunctionNames ma Io lo utilizzo in alcuni posti.

buona fortuna.

+0

grazie per la risposta, vorrei che tu fossi qui prima;) - se qualcuno è interessato, sP2013 emette anche "FakeEvents" sull'elemento body. Questi eventi sono diversi in ogni browser, ma solo ctrl + f in sp.start.js qualcosa come la funzione Fakeevent. (non ricordo esattamente ora, ma dovrebbe essere qualcosa del genere). e nota anche che la pagina di ricerca di SP2013 viene caricata dopo tutti quegli eventi;). Quindi per la pagina principale è ok per ascoltare quegli eventi, ma per la pagina di ricerca no. –

9

Una funzione di registrazione eventi documentata che equivale approssimativamente a _spBodyOnLoadFunctionNames è SP.SOD.executeOrDelayUntilEventNotified. Chiamare questo per ricevere la notifica della manifestazione "sp.bodyloaded":

SP.SOD.executeOrDelayUntilEventNotified(function() { 
    // executed when SP load completes 
}, "sp.bodyloaded"); 

Questo gestore realtà spara un po 'prima che i _spBodyOnLoadFunctionNames funzioni.

Questo riferimento è per SharePoint 2010, ma l'utilità SOD è presente in SharePoint 2013: http://msdn.microsoft.com/en-us/library/office/ff410354(v=office.14).aspx

1

https://mhusseini.wordpress.com/2012/05/18/handle-clicks-on-calendar-items-in-sharepoint-2010-with-javascript/

Il link qui sopra ha funzionato per me. Fondamentalmente utilizza ExecuteOrDelayUntilScriptLoaded per avviare il suo codice di hook del calendario dopo il caricamento di SP.UI.ApplicationPages.Calendar.js.

Quindi, nel gancio calendario si collega la propria funzione alla funzione: SP.UI.ApplicationPages.CalendarStateHandler.prototype.onItemsSucceed.

_spBodyOnLoadFunctionNames.push("LaunchColorCodeCalendarScriptOnReady"); 


function LaunchColorCodeCalendarScriptOnReady() { 


    ExecuteOrDelayUntilScriptLoaded(
     MyCalendarHook, 
     "SP.UI.ApplicationPages.Calendar.js"); 


} 

function MyCalendarHook() { 
    var _patchCalendar = function() { 
     //Do something to the items in the calendar here 
     //ColorCodeCalendar(); 
    }; 

    var _onItemsSucceed = SP.UI.ApplicationPages.CalendarStateHandler.prototype.onItemsSucceed; 
    SP.UI.ApplicationPages.CalendarStateHandler.prototype.onItemsSucceed = function ($p0, $p1) { 
     _onItemsSucceed.call(this, $p0, $p1); 
     _patchCalendar(); 
    }; 
} 
8

Ci sono diverse tecniche utilizzate per fornito il nostro codice JavaScript personalizzato caricato prima/nel mezzo/dopo eventi OnLoad in SharePoint:

ExecuteOrDelayUntilBodyLoaded. 
Sys.Application.pageLoad. 
document.ready Jquery. 
_spBodyOnLoadFunctionNames. 
_spBodyOnLoadFunction. 
ExecuteOrDelayUntilScriptLoaded:sp.core.js. 
SP.SOD.executeFunc: sp.js. 
Sys.WebForms.PageRequestManager.PageLoaded 

- funzione ExecuteOrDelayUntilBodyLoaded viene sempre eseguita la prima (ma a questo fase non possiamo accedere ai metodi SP). Questo potrebbe essere utile per eseguire il nostro codice personalizzato nella fase molto iniziale del processo OnLoad.

- Esistono due funzioni di onLoad di SharePoint _spBodyOnLoadFunctionNames e _spBodyOnLoadFunction. Sempre eseguito nell'ordine. Quindi, se vogliamo eseguire del codice dopo tutte le funzioni incluse da noi (o altri sviluppatori) in _spBodyOnLoadFunctionNames, è utile usare questa _spBodyOnLoadFunction, perché viene eseguita l'ultima.

- ExecuteOrDelayUntilScriptLoaded: sp.core.js e SP.SOD.executeFunc: sp.js. stanno scambiando l'ordine di esecuzione in modo casuale.

- Se si desidera eseguire alcune funzioni dopo tutte le funzioni (SP, dopo le funzioni di caricamento, Yammer, ecc.), È possibile utilizzare questa funzione per collegare l'evento OnLoad -> Sys.WebForms.PageRequestManager.PageLoaded.

si può vedere l'intero articolo che spiega ogni tipo, pro e contro qui: https://blog.josequinto.com/2015/06/16/custom-javascript-function-loaded-after-the-ui-has-loaded-in-sharepoint-2013/

saluti!

0

Ecco bell'articolo come utilizzare il built-in di SharePoint SOD (Script On Demand) funzionalità: http://www.ilovesharepoint.com/search/label/SOD

Funziona bene sia per SP 2010 e 2013.

L'idea di sceneggiatura su richiesta di carico ha davvero senso. SharePoint 2010 carica moltissimi JavaScript: questo richiede tempo! Quindi l'idea è: prima caricare l'HTML e lasciarlo renderlo dal browser in modo che l'utente sia in grado di leggere le informazioni richieste il più velocemente possibile. E nella seconda fase caricare il comportamento (i JavaScript).