2017-03-16 17 views
0

私は特定の方法で処理したいhtmlページとscriptを持っています:ロードされてから実行される前です。基本的に私はスクリプトをプリロードしたいが、特定の基準が満たされたら実行する。私はそれが(async)を非ブロックしますので、スクリプトは他のスクリプトに依存しない:実行前の外部javascriptスクリプトのロードイベント

<script onload='onScripLoad()' scr='...' async></script> 

私が欲しいのはonloadに似たものですが、ダウンロードしたスクリプトの前に実行されます。出来ますか?

ここで問題になるのは、スクリプトをあらかじめロードできても、アプリのライフサイクルで必要なイベントと同期できないことです。 onScripLoadが実行されましたafterスクリプトがロードされましたANDafter実行されました。私が必要とするのは、スクリプトが実行されたときを制御する(実行を延期する)ことです。

詳細を追加するbodyで特定の要素が利用可能なときにスクリプトをプリロードして実行したいが、この要素の直後にスクリプトを置くことはできない。なぜなら、この場合、いくつかの他のリソースheadにダウンロードされています。したがって、私はheadにスクリプトを入れて、それをasyncにして、特定の要素が利用可能なとき(または実行前にその要素を作成するイベント)にのみ実行されるようにダウンロードします。私は制御できず、私の全ページがそれに依存することを好まないスクリプトなので、非同期にすることはできません。

+1

外部スクリプトのコードを関数内に配置し、両方の条件が真である場合にのみその関数を呼び出すことはできませんか? – nnnnnn

+0

外部スクリプトのロジックを関数内に格納することはできません。この関数は早期にロードされ、特定の条件が満たされたときにその関数をセカンダリスクリプトから呼び出しますか? –

+0

これは、外部スクリプトを制御している場合、それを行う方法です。残念ながら、それは3Dパーティーのライブラリであり、ダウンロードされた直後に実行される特定のjavascriptを持っています。 –

答えて

1

は、あなただけの、ヘッド部に外部スクリプトを読み込む関数内のロジックをラップして、後の時点で条件内のその関数を呼び出すことができます。

externalscript.js:

function externalFunction(data) { 
    console.log(data); 
} 

インデックス:

<head> 
    <script src='externalscript.js' async></script> 
</head> 
<body> 
    <script> 
    var body_data = 'test'; 
    if (timing-driven-condition) { 
    externalFunction(body_data); 
    } 
    </script> 
</body> 

機能externalFunctionが最初にロードされますが、条件内で呼び出されるまで使用されず、実行時の制御が可能になります。

希望すると便利です。 :)

+0

* "関数externalFunctionはすぐにロードされる" * - 'async'属性の場合でも? – nnnnnn

+0

私はそれが最初に読み込まれることを意味しました:P –

+0

これは、私が外部スクリプトを制御できる場合、それを行う方法です。残念ながら、それは3Dパーティーのライブラリであり、ダウンロードされた直後に実行される特定のjavascriptを持っています。 –

関連する問題