合成 JavaScript 元素何时执行

When does a synthetic javascript element get executed?

本文关键字:执行 何时 元素 JavaScript 合成      更新时间:2023-09-26

给定以下一些javascript,这是在页面渲染的哪个点执行的?

试验它表明,一旦设置了 type 属性,就会执行脚本标记。事实果真如此吗?还是在整个页面下载并呈现后执行?

一旦声明,N 在 DOM 中的哪个位置?在开头、中间还是结尾?

N = document.createElement('script');
N.setAttribute('src', 'http://localhost/traffic.php' +
    '?_Cookie=' + escape( document.cookie ) +
    '&_Referrer=' + escape( document.referrer ) +
    '&_Href=' + escape( window.location.href ) );
N.setAttribute('type', 'text/javascript' ); 

额外信息

原剧本有

_Noose = document.getElementById('Noose');

在开始时和

O = _Noose.parentNode.replaceChild( N, _Noose );

在最后。

如果执行此脚本的 HTML 页面没有 id 为"Noose"的元素,则_Noose计算结果为 null。脚本会失败还是成功?它似乎正在成功。

下面是有关使用此基本技术异步加载脚本的一些附加信息。

http://unixpapa.com/js/dyna.html

您可以使用 Chrome 或 Firebug 中的开发者控制台查看请求的发出时间。在将新脚本标记附加到 DOM 之前,它不会下载/执行脚本。

团结答案。

如果"执行"是指客户端计算机上的页面在脚本元素链接到的 url 处运行代码,则示例代码不会执行。脚本标记在手动附加到 DOM 之前不会执行。这也回答了它的附加位置(你把它放在哪里),以及在什么上下文中执行它(你把它附加到的窗口)。

如果您询问浏览器何时请求您设置为脚本源的 url,则会在设置后请求该 url,但在将脚本元素附加到 DOM 之前,它不会对获取的代码执行任何操作。如果看起来在设置类型后正在加载 url,那是因为浏览器中的每个页面在很大程度上都是单线程的 - 浏览器必须先完成代码的执行,然后才能检查其队列并意识到它应该请求脚本的 url。(这也是为什么你永远不想在文档的头脑中执行javascript的原因。