動的にJavaScriptを読み込む
問題
状況に応じて、動的にJavaScriptを読み込みたいです。
答え
jQueryが使えるとき
$.getScript('https://~~~~')
これ1行でOK。
読み込んだ後に何かしてほしいときは、コールバックを指定。
$.getScript('https://~~~~', function(){ /* コールバック */ })
$.getScript('https://~~~~').done(function(){ /* コールバック */ })
素のJavaScriptのとき
script要素を作って、srcを設定して、どこかにappendする。
var script = document.createElement('script'); script.src = something; document.head.appendChild(script);
var script = document.createElement('script'); script.onload = function () { // ロード後何かしてほしいとき }; script.src = something; document.head.appendChild(script);
以下もOK。
最初に登場するscript要素の前に追加する。
var script = document.createElement( 'script' ); script.src = 'https://~~~'; var s = document.getElementsByTagName( 'script' )[ 0 ]; firstScript.parentNode.insertBefore( script, s );
なお、読み込みタイミングは非同期となる。
jQueryを使って、同期で読み込む
同期のajaxで読み込んでscriptタグに入れてその場で実行。
$.ajax({ url: "~~~", dataType: 'script', async:false });
jQueryを使わないで、同期で読み込む
同期のajaxで読み込んでscriptタグに入れてその場で実行。
var xhr = new XMLHttpRequest(); xhr.open('GET', '/softel-system/www/system/index.php/assets/js/es6-promise.auto.js', false); xhr.send(null); if (xhr.status === 200) { var script = document.createElement('script'); script.text = xhr.responseText; document.head.appendChild(script); }
コメント