3

使用Head.js并设置脚本元素的 .src 属性时,会在脚本准备好时调用回调方法。

但是,我想通过将文本分配给 .innerHTML 来加载脚本。执行此操作时,当我更新/编辑代码以使用此属性时,没有触发相同的回调。

/*addScriptText1
** modified from head.js
**
**
*/
function addScriptText1(file_name, callback, key) {
    var element = document.createElement('script');
    element.async = true;
    element.innerHTML = localStorage[file_name];
    element.onreadystatechange = element.onload = function () {
        $A.log('callback for element called');
        if ((!element.readyState || /loaded|complete/.test(element.readyState))) {
            localStorage[key + '_loaded'] = true;
            callback();
        }
    };
    document.head.appendChild(element);
}
4

2 回答 2

1

跨浏览器(包括 Firefox iirc)不支持在脚本元素上使用 innerHTML。我不会推荐这种方法。我会建议evalnew Function代替。

可以用 innerHTML 插入脚本吗?

于 2013-01-02T01:54:18.523 回答
1

当内联脚本插入 DOM 时,脚本会立即执行。这一切都是同步发生的,所以你不需要回调。

async在这里没有效果,因为您没有进行网络请求。同样,readyState 也没有用,因为您是以编程方式创建它,因此脚本将立即加载。

于 2013-01-02T00:29:36.000 回答