为什么这不起作用?我知道这个问题是不受欢迎的,但就我而言,我似乎无法理解为什么将这个脚本添加到头部并不像我想要的那样工作。
它附加了脚本,我可以在chrome调试器中看到它。但我仍然得到错误
tools.js:26 Uncaught ReferenceError: script_object is not defined
这没有意义,因为如果我直接从chrome调试器(由我的脚本创建并附加到头部)复制/粘贴outerHTML,并将其直接粘贴到我的index.htm中。然后就可以了。
代码:
var afterTools = document.getElementById("toolsId").nextSibling;
var script = document.createElement("script");
script.setAttribute("type","text/javascript");
script.setAttribute("src","scripts/thescript.js");
document.head.insertBefore(script, afterTools);
let temp = script_object; // Object hardcoded in thescript.js
console.log(temp);
我追加的脚本:
<script id="toolsId" type="text/javascript" src="scripts/tools.js" defer></script>
可以归结为chrome的调试器在手动编写脚本或附加脚本之间没有区别。然而,除非手动编写,否则它不会识别脚本中的对象。
答案 0 :(得分:1)
tools.js:26 Uncaught ReferenceError: script_object is not defined
在实例化之前,您正在引用变量。它必须在引用之前可用,可能是因为您使用的是defer
..
推迟
此布尔属性设置为向浏览器指示 脚本意味着在解析文档后执行,但是 在触发DOMContentLoaded之前。延迟属性应该只是 用于外部脚本。
来源:https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/script
所以浏览器只在你的第一个依赖它的代码之后执行它,因此它在那时不可用。