0

投稿javascript コードを html ファイルにロードする方法 には、実行時に外部 js を簡単にロードして実行する方法があります。しかし、2 つの問題があります。いつ実行されるかわからないことと、コードをカスタマイズできないことです。

私はこのコードを使用していました:

var elemScript=document.createElement('script');
elemScript.setAttribute('type', 'text/javascript');
elemScript.setAttribute('language', 'javascript');
var txt = document.createTextNode(result);
elemScript.appendChild(txt);
document.head.appendChild(elemScript);

結果は、私のためにカスタマイズされたコードを作成するphpによって提供されるコードです。上記のコードなどを必要とする関数をディスパッチできます。

しかし、この美しさは IE8 以前では機能しません。それを機能させる方法はありますか、それともこれらの古いナビゲーターを忘れる時が来たのでしょうか?

助言がありますか?

4

2 に答える 2

1

Vanilla JS / jQuery で動作する require.jsをお勧めします。ページの読み込み後にスクリプトを読み込む例を次に示します

さらに、require.js DomReadyプラグインを使用して、レガシーおよび最新のブラウザーをより細かく制御できます。

于 2013-01-03T22:25:25.563 に答える
1

編集:最終的な解決策:

IE8 以下では、innerHTML、innerText、appendChild(txtNode)、またはその他の種類の DOM 操作を使用してスクリプトのコードを変更することはできません。文字列内に含まれるスクリプトを実行する唯一の方法は、eval を使用することです。以下のコードは、chrome、firefox、safari、IE9、IE8、および IE7 でテストされています。

(function (window, undefined) {

    var loaded = false;

    function onScriptLoaded() // executes after external script has loaded
    {
        if (loaded)
            return;

        // this flag is to prevent versions of ie that do support onload 
        // from executing this function twice
        loaded = true;

        // example javascript loaded from php file
        var phpScriptText = "window.alert('This was added to external script using php');";

        // this is the only way for this to work accross all browsers
        window.eval.call(window, phpScriptText);
    }

    window.onload = function () { // load external script and execute onScriptLoaded when it's done loading
        var doc = window.document;

        var script = doc.createElement("script");
        script.type = "text/javascript";
        script.src = "externalScript.js";
        script.async = true;
        script.onload = onScriptLoaded; // works in most browsers

        // for IE
        if (script.onreadystatechange !== undefined) {
            script.timer = setInterval(function () {
                if (script.readyState == "loaded" || script.readyState == "complete") {
                    onScriptLoaded();
                    clearInterval(script.timer);
                }
            }, 100);
        }

        doc.getElementsByTagName("head")[0].appendChild(script);
    };

})(window);
于 2013-01-03T18:53:44.757 に答える