0

如何将 javascript 代码加载到 html 文件中,有一种方法可以在运行时简单地加载外部 js 并执行。但是有两个问题:我们不知道它什么时候执行,我们不能自定义代码。

我正在使用这段代码:

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);

在 http 请求中,结果是 php 提供的代码,它为我制作了自定义代码。上面我可以调度一些需要代码等的功能。

但这种美感在 IE8 或更早版本中不起作用。有没有办法让它发挥作用,或者是时候忘记这些老航海家了?

有什么建议么?

4

2 回答 2

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 回答
1

我建议require.js,它将与 Vanilla JS / jQuery 一起使用。 是页面加载后加载脚本的示例。

此外,您可以使用 require.js DomReady插件来更好地控制旧版和现代浏览器。

于 2013-01-03T22:25:25.563 回答