使用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);
}
答案 0 :(得分:1)
当内联脚本插入DOM时,会立即执行脚本。这一切都是同步发生的,因此您不需要回调。
async
在此处无效,因为您没有进行网络请求。类似地,readyState没用,因为你是以编程方式创建它,所以脚本会立即加载。
答案 1 :(得分:1)
跨浏览器(包括Firefox iirc)不支持在脚本元素上使用innerHTML。我不推荐这种方法。我会建议使用 eval 或 new Function 。