将脚本附加到 <head> 行不通,但手动编写它行吗? Chrome 调试器使它们相同
Appending a script to <head> doesn't work, but writing it manually does? Chrome debugger renders them the same
为什么这不起作用?我知道这个问题不受欢迎,但就我而言,我似乎无法理解为什么将此脚本附加到 head 中无法按照我想要的方式工作。
它附加了脚本,我可以在 chrome 调试器中看到它。但我仍然收到错误
tools.js:26 Uncaught ReferenceError: script_object is not defined
这没有意义,因为如果我 copy/paste outerHTML 直接来自 chrome 调试器(由我的脚本创建并附加到 head 的那个),然后直接粘贴它进入我的 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 的调试器显示手动写入脚本或附加脚本之间没有区别。然而,它无法识别脚本中的对象,除非它是手动编写的。
tools.js:26 Uncaught ReferenceError: script_object is not defined
您在实例化之前引用了一个变量。它必须在引用它之前可用,这可能是由于您正在使用 defer
..
defer
This Boolean attribute is set to indicate to a browser that the
script is meant to be executed after the document has been parsed, but
before firing DOMContentLoaded. The defer attribute should only be
used on external scripts.
来源:https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/script
因此浏览器仅在您的第一个依赖于它的代码之后执行它,因此此时它不可用。
为什么这不起作用?我知道这个问题不受欢迎,但就我而言,我似乎无法理解为什么将此脚本附加到 head 中无法按照我想要的方式工作。
它附加了脚本,我可以在 chrome 调试器中看到它。但我仍然收到错误
tools.js:26 Uncaught ReferenceError: script_object is not defined
这没有意义,因为如果我 copy/paste outerHTML 直接来自 chrome 调试器(由我的脚本创建并附加到 head 的那个),然后直接粘贴它进入我的 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 的调试器显示手动写入脚本或附加脚本之间没有区别。然而,它无法识别脚本中的对象,除非它是手动编写的。
tools.js:26 Uncaught ReferenceError: script_object is not defined
您在实例化之前引用了一个变量。它必须在引用它之前可用,这可能是由于您正在使用 defer
..
defer
This Boolean attribute is set to indicate to a browser that the script is meant to be executed after the document has been parsed, but before firing DOMContentLoaded. The defer attribute should only be used on external scripts.
来源:https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/script
因此浏览器仅在您的第一个依赖于它的代码之后执行它,因此此时它不可用。