0
...
<head>
    <script type="text/javascript" src="a.js"></script>
</head>
<body>
    <button id="test">click me</button>
    <script type="text/javascript">
        show();
        document.getElementById('test').onclick=function(){
            show();
        }
    </script>
</body>
</html>

上記のコード:

をタグに入れましたa.js。そこには作成者がい ます<head>a.jsb.js

document.getElementsByTagName('head')[0].appendChild(document.createElement('script'));  function show(){...} 

b.js;

今、b.js で which を呼び出したいのですshow()が、b.js がロードされていないため、エラーになります。

ページの読み込みをブロックするコードをいくつか追加したいと思います。

while(){} ?


実際、関数 show が呼び出されたときに b.js をロードする必要があることを学びました。

しかし、クリックイベントはどうですか? さらに、ページに show() を配置する必要があります。

ここで、head タグに別の js(base.js) を追加すると、上記のコードは次のようになります。

...
<head>
<script type="text/javascript" src="base.js"></script>
<script type="text/javascript" src="a.js"></script>
</head>
<body>
    <button id="test"></button>
    <script type="text/javascript">
        //invoke button click event from base.js and b.js
    </script>
</body>
...

たとえば、base.js と b.js にバインドされた 2 つのクリック イベント (a.js によって非同期に読み込まれる) があり、ユーザーがページのボタンをクリックすると、base.js にバインドされたイベントがすぐに呼び出されますが、その後です。 ..エラー...

body タグに呼び出し元を入れる必要があります。

4

3 に答える 3

1

b.jsロードされるまで待つ必要があります。

jQueryの方法:

$("<script>").attr("src","b.js").appendTo("head").load(show);

ネイティブ JavaScript:

var ele = document.createElement('script');
ele.src = "b.js";
document.getElementsByTagName('head')[0].appendChild(ele);
ele.addEventListener("load",show,false);
于 2012-05-13T05:34:00.320 に答える
0

onloadページの読み込みをブロックする代わりに、ウィンドウのイベントでコードを実行してみませんか?

window.onload = function() {
    show();
};
于 2012-05-13T05:33:45.330 に答える
0

onload イベントをリッスンして、そのスクリプトから何かを実行する前にそれらがロードされていることを確認できます。

//a simple script loader
function loadScript(url,callback){
    var s = document.createElement('script');                    //new script
    var document.getElementsByTagName('head')[0].appendChild(s); //append to head
    s.onload = function(){                                       //add onload
        callback();                                              //callback when done
    }
    s.src = url;                                                 //start download
}

//load b.js and run "show()" when b.js is loaded
loadScript('b.js',function(){
    show();
});
于 2012-05-13T05:33:52.620 に答える