3

プラグインとしていくつかのWebサイトで使用されるスクリプトをコーディングしています。フレームワークではなく、Javascriptのみを使用する必要があります。これらのWebサイトにロードできる他のスクリプトやフレームワークに問題を起こさずに、スクリプトをロードするための最良の方法は何でしょうか。使用したい関数を呼び出すグローバル関数を実行することを考え、この関数をwindow.loadイベントに次のように配置します。

<script>
    var global = function(){
    object.domain.function1();
    object.domain.function2(param1, param2);
    object.domain.function3(1);
}
(function(){
    if(document.addEventListener){
        document.addEventListener('load',global, false);
    }
    if(document.attachEvent){
        document.attachEvent('onload',global);
    }
})();
</script>

または単に:

<script>
    object.domain.function1();
    object.domain.function2(param1, param2);
    object.domain.function3(1);
</script>

もちろん、いくつかの要素をページにロードする必要があります。前もって感謝します。

4

2 に答える 2

2

タグ内にjavascriptを配置しても問題がない場合<body>は、ページ全体が読み込まれた後にjavascriptを実行するかなり信頼できる方法は<script>、ページの一番下にあるタグにjavascriptを配置することです。

これは、この問題を処理するための私の好ましい方法でonloadはありませんが、イベントの使用が適切に機能しない場合は、これが次のステップとして適しています。

于 2012-12-20T16:29:51.493 に答える
1

他のスクリプトやフレームワークで問題を起こさずにスクリプトをロードするための最良の方法は何ですか

あなたが考慮する必要があるのは、あなたです。

  • 名前空間を汚染する
  • 別のスクリプトを妨害する

2番目のポイントは回避が簡単で、.addEventListener互いに上書きされない同じイベントに多くのリスナーを追加することをサポートします。に興味があるかもしれない2つの異なるイベント'load'windowあり'DOMContentLoaded'ますdocument。いつでも<script>最後にを付けることができ<body>ますが、HTMLとJavaScriptを混在させたり、DOMツリーを変更したりしているため、個人的にはこれを行うのは好きではありません。

最初のポイントとして、これは無名関数を使用して実行できます。名前空間を占有する必要がある場合は、影響を最小限に抑えるために、すべての変数とメソッドを1つのオブジェクト内に保持します。

これらすべてをまとめると、次のような結果になる可能性があります

var myObjectName = { // everything in one object in global namespace
    domain: {
        function1: function () { /*...*/ },
        function2: function () { /*...*/ },
        function3: function () { /*...*/ }
    }
};

(function (fn) {
    if (window.addEventListener) {
        window.addEventListener('load', fn, false);
    }
    else if (window.attachEvent) { // Consider if support for `.attachEvent` is really necessary, people need to move on.
        window.attachEvent('onload', fn);
    }
})(function () { // pass your function anonymously
    myObjectName.domain.function1();
    myObjectName.domain.function2(param1, param2);
    myObjectName.domain.function3(1);
});
于 2012-12-20T17:02:24.057 に答える