Javascript 浏览器如何以及何时实现对文档DOM的实时更改?

Javascript 浏览器如何以及何时实现对文档DOM的实时更改?,javascript,dom,real-time,external,Javascript,Dom,Real Time,External,我的网站在head标签中动态嵌入了一个外部Javascript文件。外部Javascript定义了一个全局变量myString=data。myString在什么时候可以被网站内的Javascript访问 <html> <head> <script type="text/javascript"> myString = null; external = document.createElement("script");

我的网站在head标签中动态嵌入了一个外部Javascript文件。外部Javascript定义了一个全局变量myString=data。myString在什么时候可以被网站内的Javascript访问

<html>
<head>
    <script type="text/javascript">
        myString = null;
        external = document.createElement("script");
        //externalScript.js is one line, containing the following:
        //myString = "data";
        external.setAttribute("src", "externalScript.js");
        external.setAttribute("type", "text/javascript");
        document.getElementsByTagName("head")[0].append(external);
        alert(myString);
    <script>
</head>
<body>
</body>
</html>

当我认为这会提醒Chrome和IE中的数据时,这段代码会提醒null,即使此时DOM已经加载到externalScript.js中。浏览器何时实际计算externalScript.js?我在什么时候可以访问myString的新值?

当该脚本元素的onload事件触发时,您可以访问它,如下所示:

external = document.createElement("script");
external.onload = function() { alert(myString); };
script.onreadystatechange= function () { //for IE, the special kid...
  if (this.readyState == 'complete') alert(myString);
}
external.setAttribute("src", "externalScript.js");
external.setAttribute("type", "text/javascript");
document.getElementsByTagName("head")[0].appendChild(external);

这只是附加了一个函数,以便在加载脚本后运行,执行任何依赖于其中脚本的代码。更正之前的答案:正如评论中指出的,谢谢!,这里确实需要一个IE异常,因为它有点特殊…

当该脚本元素的onload事件触发时,您可以访问它,如下所示:

external = document.createElement("script");
external.onload = function() { alert(myString); };
script.onreadystatechange= function () { //for IE, the special kid...
  if (this.readyState == 'complete') alert(myString);
}
external.setAttribute("src", "externalScript.js");
external.setAttribute("type", "text/javascript");
document.getElementsByTagName("head")[0].appendChild(external);

这只是附加了一个函数,以便在加载脚本后运行,执行任何依赖于其中脚本的代码。更正之前的答案:正如评论中指出的,谢谢!,你确实需要一个IE例外,因为它有点特别…

Ooh,我更喜欢它。答案已删除。但是,如果我们在内部执行操作,注入外部脚本会起作用吗?我没怎么处理这个问题…@Matchu-应该,只要元素被打开,它就会工作…我想浏览器知道会发生这种事情。当一个元素被打开时,大多数浏览器实现都将其视为一个封闭的元素,在找到子元素时将其添加到父元素中,但父元素本身在打开后就很公平了。我想我在能够添加东西的最后遇到了脚本问题。。。该测试了!您还需要检查IE的ReadyStateChange。例如:@seanmonstar:Thank-更新为包含此内容的shoutout。这也是我使用抽象层的原因……我想你不能假设IE中的任何东西都能像浏览器世界的其他地方一样工作……哦,我更喜欢这样。答案已删除。但是,如果我们在内部执行操作,注入外部脚本会起作用吗?我没怎么处理这个问题…@Matchu-应该,只要元素被打开,它就会工作…我想浏览器知道会发生这种事情。当一个元素被打开时,大多数浏览器实现都将其视为一个封闭的元素,在找到子元素时将其添加到父元素中,但父元素本身在打开后就很公平了。我想我在能够添加东西的最后遇到了脚本问题。。。该测试了!您还需要检查IE的ReadyStateChange。例如:@seanmonstar:Thank-更新为包含此内容的shoutout。这也是我使用抽象层的原因…我想你不能假设IE中的任何东西都能像其他浏览器一样工作。。。