javascript - 浏览器什么时候执行Javascript?执行光标如何移动?

标签 javascript ajax

我想知道是否有任何可用资源描述浏览器的光标如何执行 Javascript。

我知道它会在页面加载时加载和执行标记,并且您可以将函数附加到各种窗口事件,但是事情变得模糊的地方是,例如,我通过 AJAX 检索远程页面并将其内容放入分区

如果该远程页面必须加载脚本库,例如 <script src="anotherscript.js" /> ,什么时候加载“anotherscript.js”并执行其内容?

如果我在当前页面上包含“anotherscript.js”,然后加载一些包含此脚本的重复包含的远程内容,会发生什么情况?会覆盖原来的吗?如果原始“anotherscript.js”中有一个 var,我更改了它的值,然后重新加载该文件,我会丢失原始值还是忽略此脚本的第二次包含?

如果我通过 AJAX 加载一些程序化 Javascript,它什么时候执行?在我做完之后立即 mydiv.innerHTML(remoteContent) ?还是在此之前执行?

最佳答案

答案因脚本标签的位置和添加方式而异:

  1. 与您的标记内联的脚本标记与浏览器对该标记的处理同步执行(除了,请参阅 #2),因此如果 - 例如 - 这些标记引用外部文件,它们往往会减慢速度页面的处理。 (这样浏览器就可以处理 document.write 语句,这些语句会更改它们正在处理的标记。)

  2. 带有 defer 的脚本标签在某些浏览器上,属性可能要等到 DOM 完全呈现后才会执行。自然这些不能用document.write . (同样有一个 async 属性使脚本异步,但我不太了解它或它的支持程度;details。)

  3. 您在 DOM 加载后(通过 innerHTML 和类似方式)分配给元素的内容中的脚本标记根本不会执行,除非您使用 jQuery 或 Prototype 等库来为您执行此操作。 (除了 Andy E 指出的一个异常(exception):在 IE 上,如果它们具有 defer 属性,它将执行它们。在其他浏览器中不起作用。)

  4. 如果您附加一个实际的 script通过 Element#appendChild 添加到文档中,浏览器立即开始下载该脚本,并在下载完成后立即执行。以这种方式添加的脚本不会同步执行,也不一定按顺序执行。首先附加一个 <script type="text/javascript" src="MyFct.js"></script> , 然后追加 <script type="text/javascript">myFunction();</script>很可能在远程(第一个)之前执行内联(第二个)。如果发生这种情况并且MyFct.js声明 myFunction() ,当我们尝试将它与内联脚本一起使用时,它不会被定义。如果您需要按顺序完成事情,您可以通过观察 load 来判断何时加载了远程脚本。和 readyStateChange script 上的事件您添加的元素(load 是大多数浏览器上的事件,readyStateChange 是某些版本的 IE 上的事件,有些浏览器同时执行这两种操作,因此您必须为同一脚本处理多个通知)。

  5. 当相关事件发生时,在属性 ( <a href='#' onclick='myNiftyJavaScript();'> ) 上而不是在脚本标记中执行事件处理程序中的脚本。


我正在忙于我的 Real Job,突然我的后脑说“你知道,你被告诉如果你将他们分配给 innerHTML 他们就不会被执行,但是你有没有亲自检查过?”我没有,所以我做了 -- FWIW:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Script Test Page</title>
<style type='text/css'>
body {
    font-family: sans-serif;
}
</style>
<script type='text/javascript'>
function addScript()
{
    var str, div;

    div = document.getElementById('target');
    str = "Content added<" + "script type='text/javascript'>alert('hi there')<" + "/" + "script>";
    alert("About to add:" + str);
    div.innerHTML = str;
    alert("Done adding script");
}
</script>
</head>
<body><div>
<input type='button' value='Go' onclick='addScript();'>
<div id='target'></div>
</div></body>
</html>

来自脚本的警报不会出现在 IE7、FF3.6 或 Chrome4 上(我没有费心去检查其他人,我本来是要工作的:-))。而如果您附加元素,如图所示 here , 脚本被执行。

关于javascript - 浏览器什么时候执行Javascript?执行光标如何移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2342974/

相关文章:

javascript - 网站可以在 Firefox 和 Chrome 中运行,但不能在 Internet Explorer 中运行

javascript - 有没有一种方法可以检查数组是否在 SQLite 中包含一个值?

Javascript - 添加更多 on.change 选项

php - 我的网站在移动设备/较慢的计算机上滚动很糟糕

javascript - 需要 Firefox ctypes 输出字符串参数的工作示例

php - 如何寻址 "Refused to Set Unsafe Header: Connection"?

javascript - Xpath 选择两个子元素都包含文本的元素

jquery - 我可以使用 ajax 和 jquery 访问我的私有(private) bitbucket 存储库吗?

Jquery 不适用于 ajax 加载的内容 div

javascript - 如何处理ajax登录