2013-08-09 15 views
6

Mi piacerebbe avere un intervallo che tenga traccia di quali elementi vengono caricati nella pagina corrente. Ad esempio, supponiamo di avere una pagina che carica un file css, alcuni script, immagini, un lettore video flash e quindi il lettore video flash carica un file video. Gli elementi caricati possono o non possono appartenere allo stesso dominio della pagina. Alcuni di essi possono essere caricati tramite ajax o flash e non hanno un tag sulla pagina. Voglio tenere traccia di ciascuno e creare una matrice che memorizzi le informazioni su di loro.È possibile elencare le risorse esterne caricate su una pagina Web con JavaScript?

Mi piacerebbe avere uno script che fa qualcosa di simile a questo pseudocodice:

var all_external_resources = array(); 

setInterval(function() { 
    var external_items = list_external_resources(); 
    for (var i in external_items) { 
    if (all_external_resources.indexOf(external_items[i]) < 0) 
     all_external_resources.push(external_items[i]); 
    } 
}, 100); 

Questo sarebbe possibile?

+0

Di solito lo facciamo con i callback a qualche funzione quando vengono caricati vari oggetti. È un modo asincrono di fare la stessa cosa. Una volta che ti avvolgi la testa, è dolce. –

+0

Potresti ampliarlo? – Marty

+0

Se ho capito bene la domanda, non è possibile. Puoi vedere tutte le richieste utilizzando gli strumenti per sviluppatori, ma non puoi monitorarle con JavaScript. Questa è una questione di sicurezza, credo (per esempio, si pensi al codice js di terze parti da un annuncio). – bfavaretto

risposta

8

È possibile eventualmente utilizzare Resource Timing per recuperare i nomi delle risorse:

var resources = window.performance.getEntriesByType("resource"); 
resources.forEach(function (resource) { 
    console.log(resource.name); 
}); 

è un'estensione di Navigation Timing (Can I use...) ed è supportato in molti browser.

+0

Interessante, esaminerò questa idea. – Marty

+0

Beh, questo sicuramente funziona bene! Purtroppo il supporto del browser non è ancora disponibile, ma questa è sicuramente una buona risposta per questa domanda. – Marty

Problemi correlati