假设script
脚本运行时文档中的最后一个元素* 是当前正在运行的脚本是否安全?
例如,我想创建一个脚本,该脚本可以放在页面正文的任何位置,并在同一位置显示一个元素。我正在做这样的事情:
function getCurrentScriptElement() {
var scripts = document.getElementsByTagName('script');
return scripts[scripts.length - 1];
}
var script = getCurrentScriptElement();
var view = document.createElement('span');
/* Put stuff in our view... */
script.parentNode.insertBefore(view, script);
假设脚本在文档正文中,这是否“安全”?该getCurrentScriptElement
函数是否总是返回正在运行的脚本?如果没有,怎么办?
我想在不将脚本绑定到特定 id 属性或类似属性的情况下执行此操作,我希望它只是位置性的。
我在这里创建了一个示例来引入这个脚本。一个答案表明,其他脚本可能会创建这样的示例会中断的条件。是否可以在此示例中添加其他脚本来破坏它?
有人建议其他具有defer
或async
属性的脚本可以打破这一点。谁能举例说明这样的脚本如何工作?
据我了解,defer
意味着首先加载 DOM,然后运行带有defer
标签的脚本。出现在另一个脚本元素上的属性将如何defer
影响 的行为getCurrentScriptElement
?
async
,据我了解,这意味着开始获取该脚本并同时继续解析 DOM,不要等待……但是当它到达我的脚本时,它仍然应该停止并等待,对吗?
我看不出任何一个会如何影响它,谁能提供一个例子?
*出于这个问题的目的,我只对外部脚本感兴趣。
** 不是script
整个文档中的最后一个script
元素,而是文档运行时的最后一个元素。文档的其余部分不应该加载,对吧?