Mam stronę html, na której dynamicznie dołączam kod HTML za pomocą kodu JavaScript, jak poniżej
<script type="text/javascript" src="/myapp/htmlCode"></script>
Chcę wywołać funkcję js, np. LoadContent (); gdy powyższy skrypt doda dynamiczny html.
Czy ktoś może mi pomóc, jak mogę to zrobić?
javascript
jquery
html
Neeraj
źródło
źródło
onload
jest ok dla wersji IE 9 i nowszych - więc samo ustawienieonload
jest teraz prawdopodobnie w porządku dla większości ludzionload
rozpocznie oddzwanianie w chwili, gdy skrypt "LOADS" zostanie uruchomiony, a nie wtedy, gdy zostanie faktycznie zakończony, co jest rozczarowująceonload
można wywołać procedury obsługi, gdy skrypt nie zakończył wykonywania, ponieważ JavaScript jest jednowątkowy. Oznacza to, żeonload
procedurę obsługi można było wywołać tylko PRZED rozpoczęciem wykonywania skryptu lub PO jego zakończeniu. Osobiście nigdy nie widziałem, żeby wystąpił pierwszy przypadek ... NIGDY. Jeśli ktoś wie o powtarzalnym przypadku, w którymonload
procedurę obsługi można wywołać PRZED rozpoczęciem wykonywania skryptu, prosimy o poinformowanie nas.function loadScripts (urls, callback) {var counter = 0 for (var i=0; i<urls.length; i++) { loadScript(urls[i], function () { if (++counter === urls.length) { callback() } }) } }
Miałem ten sam problem ... Moje rozwiązanie (bez jQuery):
<script onload="loadedContent();" src ="/myapp/myCode.js" ></script>
źródło
Jeśli czytasz ten post w 2020 roku, prawdopodobnie jesteś bardziej przyzwyczajony do obietnic. Bardziej nowoczesne podejście jest preferowane, jeśli wszystkie przeglądarki docelowe obsługują ES6 lub używasz wypełnienia polyfill.
To rozwiązanie działa jak odpowiedź @JaykeshPatel , ale jest oparte na
Promise
s:// definition function loadScript(scriptUrl) { const script = document.createElement('script'); script.src = scriptUrl; document.body.appendChild(script); return new Promise((res, rej) => { script.onload = function() { res(); } script.onerror = function () { rej(); } }); } // use loadScript('http://your-cdn/jquery.js') .then(() => { console.log('Script loaded!'); }) .catch(() => { console.error('Script loading failed! Handle this error'); });
Możesz przekazać niektóre zmienne kontekstowe w argumentach metody
res
wywołania zwrotnego lub, jeśli twoja biblioteka zaimportowała jakiś globalny symbol, możesz tam odwołać się do niego.Na przykład, ponieważ jQuery wprowadza
$
symbol globalny, możesz wywołaćres($)
i utworzyć dla niego lokalny zasięg (idealne, jeśli używasz TypeScript i nie chcesz deklarować zmiennej modułu w każdym pliku, w ten sposób możesz pisaćconst $ = await loadScript(..)
).Jeśli nie chcesz przekazywać żadnego argumentu, możesz po prostu skrócić swój kod w następujący sposób:
źródło
script.onLoad = res;
//return new Promise(res => script.onload = res)
. Ale przypisanie funkcji doonload
może być łatwiejsze do odczytania i pozwala przekazać argument o rozwiązaniuspróbuj czegoś takiego
var script = document.createElement('script'); if(script.readyState) { //IE script.onreadystatechange = function() { if ( script.readyState === "loaded" || script.readyState === "complete" ) { script.onreadystatechange = null; alert(jQuery); } }; } else{//others script.onload = function() { alert(jQuery); } } script.src = "http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js" document.documentElement.appendChild(script);
źródło
właściwie możesz po prostu wstawić
loadedContent()
jako ostatnią linię skryptu, który ładujesz (co jest rodzajem koncepcji JSONP)źródło
Moja odpowiedź jest rozszerzeniem odpowiedzi Jaykesh Patel . Zaimplementowałem ten kod, aby załadować wiele javascript . Mam nadzieję, że to komuś pomoże:
// RECURSIVE LOAD SCRIPTS function load_scripts( urls, final_callback, index=0 ) { if( typeof urls[index+1] === "undefined" ) { load_script( urls[index], final_callback ); } else { load_script( urls[index], function() { load_scripts( urls, final_callback, index+1 ); } ); } } // LOAD SCRIPT function load_script( url, callback ) { var script = document.createElement( "script" ); script.type = "text/javascript"; if(script.readyState) // IE { script.onreadystatechange = function() { if ( script.readyState === "loaded" || script.readyState === "complete" ) { script.onreadystatechange = null; callback(); } }; } else // Others { script.onload = function() { callback(); }; } script.src = url; document.getElementsByTagName( "head" )[0].appendChild( script ); debug("javascript included: "+url); } // EXAMPLE var main = function() { console.log("main function executed"); } var js = [ "path/to/script-1", "path/to/script-2", "path/to/script-3" ]; load_scripts( js, main );
źródło
Sprawdź head.js . Osiągnie to, czego szukasz, zapewniając wywołania zwrotne, gdy plik (i) zostaną pomyślnie załadowane i wykonane.
źródło
$.getScript("your script",function () { "your action"; });
źródło