1

给定以下 javascript 位,在页面渲染的什么时候执行?

对其进行试验表明,一旦设置了 type 属性,就会执行 script 标签。真的是这样吗?还是在整个页面下载并呈现后执行?

一旦声明,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。脚本会失败还是成功?它似乎成功了。

4

2 回答 2

1

Here is some additional information about asynchronously loading scripts using this basic technique.

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

You can use the developer console in Chrome or Firebug to see when the request is being made. Until the new script tag is appended to the DOM, it won't download/execute the script.

于 2012-05-07T02:49:16.360 回答
1

团结回答。

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

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

于 2012-05-07T02:44:19.207 回答