假设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
元素,而是它运行时文档的最后一个元素。文档的其余部分不应加载,对吗?