【问题标题】:FireFox 24 Unresponsive Script erorrFireFox 24 无响应的脚本错误
【发布时间】:2014-06-02 21:05:19
【问题描述】:

首先,由于隐私问题,我无法给出确切的代码,但我会尽量使其准确。

$(".page").each( function() {
 var this_dom = $(this);
 var this_class = this_dom.attr("class");
 var page_no = this_class.substr(this_class.indexOf("page_")+5,1);
 var obj = {};
 obj.id = 'page_' + page_no;
 obj.encoded_html = encodeBase64("<html><head><style>"+css+"</style></head><body>"+ $(this).html() +"</body></html>" ); 
 obj.quality = 10;
 obj.height = 2200;
 obj.width = 1700;

 obj.format = 'png';                    
 $.ajax({
    type: "POST",
     url: "some url",
    data: obj,
    dataType: 'json',
    success: function(res) {
            page_cnt++;
        $("form.cmxform").append('<input type="hidden" name="page_'+(page_no)+'" value="'+res['img']+'">'); // PRODUCTION

        if (page_cnt === page_total) {
            form.submit(); 
        }
        return false;
    }
  }); 
});

那么它的作用是遍历所有具有 .page 类的标签,对里面的内容进行编码,使用 ajax 发布它,然后将其呈现为 png,然后重新编码发送回,然后附加到表单中。一旦它完成了所有这些,它就会通过另一个 .php 文件将数据 uri 提交到数据库。

这已经工作了很长时间,并且对于其他形式,我仍然可以正常工作,但是我确实有一个有 7 个“页面”,并且在大约第四个之后,我在 FF 中收到了无响应的脚本错误消息,并且这个刚刚开始发生。在 Chrome 甚至 IE 中都可以正常工作。另外,如果 FireBug 是打开的,这永远不会失败,我什至没有设置断点或任何东西,只是让它打开一切似乎都可以正常工作。

此外,无响应脚本错误是随机的,一次可能是 jquery 库,另一次是我使用的 base64 库,但大多数情况下它会吐出 jquery 库错误。

我是 jquery 和 js 的新手,几乎是自学成才的,所以帮了很多忙,你能再帮我一次吗?!

【问题讨论】:

  • 可能是 ajax 超时?有什么迹象吗?
  • 我全局设置了这个:$.ajaxSetup({ async: false, cache: false, timeout: 20000 });它曾经是 10000,但我把它翻了一番,看看是否有帮助,但没有。
  • 那么可能不是您的要求。请参阅我关于如何使用自己的超时而不是 firefox 干预来调用此函数的答案。

标签: jquery firefox firebug


【解决方案1】:

可能与服务器请求耗时过长、firefox 扩展或其他原因有关。可能需要使用类似的东西来绕过 Firefox 超时。

setTimeout(pageFunction, 8000);

function pageFunction () {
    $(".page").each( function() {
        var this_dom = $(this);
        var this_class = this_dom.attr("class");
        var page_no = this_class.substr(this_class.indexOf("page_")+5,1);
        var obj = {};
        obj.id = 'page_' + page_no;
        obj.encoded_html = encodeBase64("<html><head><style>"+css+"</style></head><body>"+ $(this).html() +"</body></html>" ); 
        obj.quality = 10;
        obj.height = 2200;
        obj.width = 1700;
        obj.format = 'png';                    
        $.ajax({
            type: "POST",
            url: "some url",
            data: obj,
            dataType: 'json',
            success: function(res) {
                page_cnt++;
                $("form.cmxform").append('<input type="hidden" name="page_'+(page_no)+'" value="'+res['img']+'">'); // PRODUCTION
                if (page_cnt === page_total) {
                    form.submit(); 
                } return false;
            }
        }); 
    });
}

【讨论】:

  • 所以我尝试了这个,首先使用 8000,但失败了,然后我将其增加到 20000,大约 12 秒后失败。老实说,我什至不确定它是否在这里失败,但在我继续前进之前,我需要确保它不在这里。
  • 我还应该提到我之前确实尝试过上述方式,但我重新尝试只是为了确保。我尝试的另一件事是将每个“页面”“捆绑”到一个数组中,然后将数组发布到处理它的位置,然后发回给我并附加到
    标记,然后提交。结果是一样的。
  • 控制台没有异常?
【解决方案2】:

Firefox 24 稍微改变了它检测阻塞页面的脚本的方式,因此用户无法与之交互。

特别是,它现在包括在脚本运行时同步 XMLHttpRequest 调用所花费的所有时间。由于您在全局范围内强制所有 jQuery ajax() 内容同步,因此这些网络访问所花费的时间现在计为脚本执行时间的一部分,因为在此期间用户无法与页面交互。在脚本被阻塞 10 秒后(默认情况下;有更改确切时间的偏好)Firefox 会询问用户是否终止有问题的脚本;这就是您看到的提示。

【讨论】:

    猜你喜欢
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多