JS で動的ロードして関数を追加する。
適当な関数を突っ込んで、ロードされるのを待ってから、関数を使いたい。 とりあえず、script.onload で解決することはわかってるんだけど。読み込みたい関数が複数だと、全部ロードされるのを待つのをコールバック・チェーンで待つのはしんどかったので、Promise.allにした。
外部JSを追加してロード待つ
document に script タグを動的に追加して、onload 関数を仕込む。それをPromiseにして、複数のURLが全部ロード終わってResolveされるまでを、Promise.all()で待つ。
function import_script( urls ){ return Promise.all( urls.map(function(url){return new Promise(function(resolve,reject){ var script = document.createElement('script'); script.src = url; script.onload=resolve; document.head.appendChild(script); })})); }
ロード待ってからなにかする。
import_script( ["https://example.com/example.js", "https://example.com/example2.js"] ).then(function(){ // main console.log('loaded'); // ここにロード後に実行したい処理を書く。 })
なんでこんな事やってるのか?
「babel とか webpackでトランスパイラすりゃいいじゃん?」
違うんだ、そうじゃないんだフロント開発じゃないんだ。
Chrome拡張で、メインページにスクリプトをInjectして追加したいとか。Bookmarkletでページにスクリプトを追加してなにかやりたいとか。
そういうときに足りないライブラリや、ショートカット関数を追加したい時があるんですね。
関連資料
気づいたら、ずっとおなじようなことやってんだww私はwww「まるで成長してない」