1

スクリプトまたはスタイルシートが HTML の head タグに既に追加されているかどうかを確認するために、この関数を作成しました。スクリプトが既に存在する場合、関数は同じ参照を再度追加することを防止する必要があります。

これは私のコードです:

function appendScript(path, type) {
    var x = document.getElementsByTagName(type);
    var header_already_added = false;

    for (var i=0; i< x.length; i++){
          if (x[i].src == path || x[i].href == path){
                 // ... do not add header again
                 header_already_added = true;
          }
    }

    if (header_already_added == false){
        var head = document.getElementsByTagName('head')[0];

        // We create the style
        if (type == 'link') {

            var style = document.createElement('link');
            style.setAttribute("rel", "stylesheet");
            style.setAttribute("type", "text/css");
            style.setAttribute("href", path)

            head.appendChild(style);

        } else if (type == 'script') {

            var script = document.createElement('script');
            script.setAttribute("type", "text/javascript");
            script.setAttribute("src", path);

            head.appendChild(script);

        }
    }
}

そして、私はこのように関数を呼び出します

        appendScript('_css/style.test.css', 'link');
        appendScript('_scripts/_js/script.test.js', 'script');

コンソールログには何も問題はありません..しかし、問題は、スクリプトが再び追加されるのを妨げないということです. 誰でも間違いを見つけることができますか?

4

2 に答える 2

3

パラメータとして相対パスを使用しています。ブラウザはそれを絶対パスに変換します。したがって、絶対パスを使用する必要があります。そのように:

appendScript('http://stackoverflow.com/_scripts/_js/script.test.js', 'script');
于 2013-04-13T13:43:12.823 に答える
0

相対URLを使用しているためだと思います。「path」と比較する要素の「src」属性にチェックを入れると、プロトコルとホストが含まれているため、一致しません。それを考慮する必要があります。

于 2013-04-13T13:42:48.707 に答える