0

タイトルは少し曖昧かもしれませんが、アイデアは静かでシンプルです。

HTML ページの Head セクションに JS ファイルへの参照を追加する JavaScript コードが少しあります。新しい JS ファイルが追加された後、この新しく追加された JS ファイル内に存在する関数を呼び出したいと思います。したがって、次の JS コードを実行するリンク (javascript:eval を使用) があります。

//PART 1
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script'); 
script.setAttribute('type', 'text/javascript'); 
script.setAttribute('src', 'http://localhost/test.js'); 
head.appendChild(script); 

//wait for JS file to load should go here

//PART 2
calltest(); //calltest is a function that exists within http://localhost/test.js

これは、PART 1 と PART 2 の間に遅延がある場合 (たとえば、ユーザーが順番にクリックする 2 つの別々のリンク上にある場合) は正常に機能しますが、コード全体が 1 つのリンクで順番に実行される場合は機能しません (私は推測しています)。 JS ファイル (パート 1 で追加) をまだロードする機会がなかったからです)。PART 2 を PART 1 が完全に完了するまで待機させる方法はありますか? おそらく、関数 calltest() を呼び出す前に、何らかの遅延または JS ファイルの取得を待機する必要がありますか?

4

2 に答える 2

1

これでうまくいくはずです。

window.onload = calltest;

または、おそらくこれを最初のスクリプトに追加します

script.onreadystatechange= function () {
  if (this.readyState == 'complete') calltest();
 }
 script.onload= calltest;
于 2013-01-22T20:17:46.307 に答える
0

Marcell のコメントによると、最終的に次の解決策を採用しました。

calltest() は、挿入した JS ファイルの最後のステートメントである可能性があります

于 2013-01-25T12:17:39.630 に答える