【问题标题】:JavaScript script dynamic script loading IE6 issueJavaScript脚本动态脚本加载IE6问题
【发布时间】:2010-02-12 14:42:41
【问题描述】:

我正在使用内部自定义库来复制 jsonp 调用。在你们要求我使用 JQuery 或其他库之前,让我告诉我由于某些限制我不能使用它。

以下是用于发出请求的代码:

BurrpJsonAjaxRequest.prototype.send = function() { this.script = document.createElement("script"); this.script.type = "文本/javascript"; this.script.charset = "UTF-8"; this.script.src = this.URL; if (typeof(this.callBack) == "function") { this.script.callback = this.callBack; } var currRequest = 这个; //睡眠(100); if (this.script.src.readyState) { //IE this.script.src.onreadystatechange = function() { if (this.script.src.readyState == "已加载" || this.script.src.readyState == "完成") { this.script.src.onreadystatechange = null; currRequest.hideLoading(); currRequest.callback(); } }; } else { //其他 this.script.src.onload = function() { currRequest.hideLoading(); currRequest.callback(); }; } this.docHead.appendChild(this.script); };

这在第一次执行时有效。在随后的执行中,发出请求但不执行回调。

如果我使用如下的睡眠方法(在代码中注释),回调也会在后续调用中执行。

功能睡眠(毫秒){ var start = new Date().getTime(); for (var i = 0; i 毫秒){ 休息; } } }

睡眠如何影响回调的执行?不过在 Firefox 中运行良好。

【问题讨论】:

    标签: javascript internet-explorer-6 dynamic-script-loading


    【解决方案1】:

    第一次通过时,this.script.src.readyState 为 false(脚本仍在加载),并且为 onLoad 事件创建了一个处理程序。当 onLoad 被触发时,匿名 onLoad 函数被调用——这看起来与 onReadyStateChange 处理程序非常相似。但是,onLoad 只会触发一次,因此您的函数只会被调用一次。

    睡眠会减慢 enuf 的执行速度,因此当您执行 if 语句时,您的 this.script.src.readyState 为 true

    你怎么看?

    【讨论】:

    • 我将其用作对象,并且每次使用时都会实例化该对象。它在firefox中也能很好地工作。唯一的问题是 IE6。
    • 睡眠有影响的事实表明存在时间问题(显然)。您是否嗅探过从 IE6 到服务器的流量并将其与 FF 流量进行比较?
    • 我正在使用 Fiddler 并尝试查看请求响应。在任何一种情况下(有睡眠和没有睡眠)都会发送请求并返回响应,但如果没有睡眠 Fiddler 会告诉我会话被中止。这是什么意思? IE 正在中止会话?
    • 我在不使用睡眠的情况下找到了解决问题的方法。此特定事件是通过单击链接触发的,并且 onclick 事件处理程序最后没有返回 false。一旦我添加了 return false 它就开始工作了。但问题是添加睡眠如何防止这个问题,因为最后没有添加睡眠。
    • 睡眠是否有可能导致您通过 if 语句采取不同的路径?有睡眠 -> 那么,没有睡眠 -> 其他?
    猜你喜欢
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2017-08-24
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    相关资源
    最近更新 更多