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

2023-12-13

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

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

如果该远程页面必须加载脚本库,例如<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 指出的一个例外:在 IE 上,如果他们有defer属性,它将执行它们。不适用于其他浏览器。)

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

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


我正在忙于我的真正工作,突然我的后脑说:“你知道,你一直在told如果您将它们分配给它们,它们将不会被执行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,脚本被执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浏览器什么时候执行Javascript?执行光标如何移动? 的相关文章

随机推荐

  • PushBots 应用程序崩溃

    我正在制作一个 Android 应用程序 它使用 PushBots 来使用推送通知服务 我想要做的是 当我收到推送通知时 我想将消息保存在 TextView 中 以便我可以拥有所有收到消息的历史记录 我做了 PushBots 网站上写的所有
  • 如何使用 Orion 在传出通知中添加自定义标头?

    我阅读了 自定义通知 部分NGSv2 规范我仍然对如何进行这项工作存有疑问 我是否必须将以下代码作为有效负载放入订阅 POST 中 httpCustom url http foo com entity id headers Content
  • 如何从文件中删除与正则表达式不匹配的行?

    我有一个大文件 如下所示 7f0c41d6 f9c6 47aa a034 d40bc629c973 csv 159890 159891 24faaed6 62ee 4175 8430 5d73b09911c8 csv 159907 5bad
  • 如何在后台启动 PhantomJS + Selenium 窗口?

    我在我的应用程序中使用 selenium phantomjs 但我想在后台启动我的应用程序 selenium 和 phantomjs 窗口 我该怎么做 I tried PhantomJSOptions options new Phantom
  • 从 S3 传输到 Google 存储 - 密钥不正确

    过去几个小时我一直在尝试设置从 S3 到我的谷歌存储桶的传输 创建传输时 我不断收到的错误是 访问密钥无效 请确保 S3 存储桶的访问密钥正确 或将存储桶权限设置为授予所有人 访问密钥和秘密都是正确的 因为它们当前在生产中用于 S3 完全访
  • 一组中的 d3 矩形干扰另一组中的矩形

    我有一个小组叫groove它有两个矩形 这些与数据无关 我也有一个群叫group其中有许多与数据绑定的矩形 在第二组中称为group只有三个数据点 但只显示两个 为什么第一个没有被渲染 我以前见过这个 但不记得如何解决 var margin
  • JavaScript 绑定问题

    这是让我感到困惑的代码片段 var timer start function var self this Why the code below doesn t write to this window setInterval self ti
  • 模板类的 CUDA 链接器错误

    在 ubuntu 上使用 CUDA 5 0 和 gcc g 4 6 在使用模板链接 CUDA 代码时遇到错误 cu array cu include cu array hpp template
  • C# - 如何将图像转换为 8 位彩色图像?

    我需要将从文件加载的 PNG 图像转换为另一个设备使用的每像素 8 位字节数组 嵌入式编程 我正在逐像素复制到使用 16 位颜色创建的新图像中 Format16bppRgb565 但是我需要Format8bpp NET Framework
  • Java 中的修剪字符

    如何在 Java 中修剪字符 e g String j joe jill Trim new char j应该 乔 吉尔 String j jack joe jill Trim jack j应该 乔 吉尔 etc 阿帕奇共享区有一个伟大的St
  • UISearchDisplayController隐藏导航栏

    我看到一个奇怪的情况 我在导航栏中放置了一个搜索栏 并将 UISearchDisplayController 与搜索栏链接起来 现在 当用户单击搜索栏时 搜索显示控制器倾向于隐藏导航栏 因此也隐藏搜索栏 为了解决这个问题 我对 UISear
  • CDI Eager Application 作用域 bean

    Since ManagedBean eager true 将被弃用 您如何创建eager 应用程序范围的 cdi bean 通过使用 CDI 扩展框架解决了这个问题 创建预选赛 Qualifier Target value ElementT
  • 将两个数据库表合二为一?

    在将关系数据库建模为库存管理系统时 我遇到了一些麻烦 目前 它只有 3 个简单的表 Product ID Name Price 收入 ID Date Quantity Product ID FK Sales ID Date Quantity
  • 如何将 Joda-Time DateTimeFormat.forStyle() 转换为 JSR 310 Java 时间?

    我正在将 Grails Joda Time 插件转换为JavaTime 我有旧的乔达时间代码 如下所示 def style switch type case LocalTime style S break case LocalDate st
  • Java:递归查找列表中的最小元素

    我会先说这是家庭作业 我只是在寻找一些指示 我一直在为这个问题绞尽脑汁 但我一生都没有明白 我们被要求找到列表中的最小元素 我知道我在这里需要一个子列表 但之后我不确定 任何指示都会很棒 谢谢 Find the minimum elemen
  • Metal RGB 到 YUV 转换计算着色器

    我正在尝试编写一个 Metal 计算着色器来从 RGB 转换为 YUV 但遇到构建错误 typedef struct float3x3 matrix float3 offset ColorConversion Compute kernel
  • 如何检测页面是否为 RSS 或 ATOM 提要

    我目前正在用 PHP 构建一个新的在线 Feed 阅读器 我正在开发的功能之一是提要自动发现 如果用户输入网站 URL 脚本将检测到它不是提要 并通过解析 HTML 来查找正确的提要 URL tag 问题是 我目前检测 URL 是否为提要或
  • 如何将故事板合并到cocos2d 2.0项目中?

    我在 cocos2d 2 0 中做了一个项目 想使用故事板合并一个主菜单 我在tinytimgames com上尝试过Jerrod Putnam的教程 我无法提供链接 因为新用户每个帖子只允许有2个链接 但如果你用谷歌搜索 cocos2d
  • 将 UIView 叠加到 Cocos 层上?

    我是 iOS 和 Cocos 开发新手 目前 我的 HelloWorldLayer 类中有一个基本的应用程序 它包含我的精灵和触摸交互方法 一切都很好 我正在尝试在当前看到的内容之上添加另一个 面板 UIView 最终 该面板将具有与主画布
  • 浏览器什么时候执行Javascript?执行光标如何移动?

    我想知道是否有任何可用资源来描述浏览器光标如何执行 Javascript 我知道它会在页面加载时加载并执行标签 并且您可以将函数附加到各种窗口事件 但事情变得模糊的是 例如 我通过 AJAX 检索远程页面并将其内容放入 div 中 如果该远