在IE中防止"SCRIPT5:访问被拒绝"错误

rin*_*ogo 36 ajax jquery internet-explorer cross-domain

场景:A.com上的页面A在B.com上有一个包含页面B的IFrame.网页B使用jQuery的1.10.1和它不会需要页次A.沟通

无论如何,在IE9和IE10中,jQuery会生成"SCRIPT5:访问被拒绝".错误,似乎拒绝执行任何jQuery.我不需要跨域通信,AJAX请求等,但我确实需要在页面B中加载和执行jQuery而不会出错.

有没有办法防止IE9和IE10中出现此错误(并禁止执行代码)?(仅供参考,其他浏览器类似地生成"拒绝访问"错误,但它们不会妨碍代码执行)


更新:

jsFiddle:http://jsfiddle.net/86q5k/4/

主页的内容是(来自jsFiddle):

<iframe src="http://endorkins.com/test-iframe.html"></iframe>
Run Code Online (Sandbox Code Playgroud)

iFramed页面的内容是:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.1.min.js"></script>

    <script type="text/javascript">
        $(document).ready(function() {
            console.log('Hello!  Congratulations.  Your browser is neat, and doesn\'t sniff glue! (http://bit.ly/12QTvTT)');
        });
    </script>
</head>
    <body>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

Chrome中的结果(请注意控制台中的消息): 在此输入图像描述

IE 9.0.8112中的结果(注意在控制台中省略了消息):

在此输入图像描述

rin*_*ogo 40

我找到了一个解决方法.这似乎是jQuery 1.10.1中的一个错误("功能"?).使用jQuery 1.10.0,不再出现错误:

http://jsfiddle.net/86q5k/5/

<iframe src="http://endorkins.com/test-iframe-1.10.0.html"></iframe>
Run Code Online (Sandbox Code Playgroud)

奇怪.很奇怪.如果有人知道为什么会在1.10.1中发生这种情况,以及如何解决它,我(以及全球各地的jQuery小伙伴)肯定会非常有兴趣知道!:)


更新:看起来这是一个合法的jQuery 1.10.1错误:http://bugs.jquery.com/ticket/13980


更新:根据@ emanuele-greco,这在1.10.2及更高版本中得到修复.因此,升级您的jQuery版本可能会解决问题.

  • 大!jQuery 1.10.2也解决了这个问题. (9认同)
  • 谢谢!完全为我解决了. (2认同)

小智 7

好的我发现了同样的问题并用最奇怪和最可怕的解决方案修复了它.

我正在尝试使用图像弹出文件上传对话框,然后对更改事件执行自动表单提交.我已经辞职了,在IE中用户将不得不点击图片来发布帖子.我把图像放在表格上(就像我在网站上的几个地方.这就产生了访问被拒绝的错误,在震惊中我再次点击它并且得到错误.在第三次点击它工作.所以我再试一次同样的结果前两次点击错误,第三次工作.而简单的Javascript代码,作为自制肥皂丑,但现在工作是

var files= document.getElementById("newfiles");
files.onchange = addFiles;

function addFiles() {
    try {
        $("#fileupload").submit();
    } catch (e) {
        try {
            $("#fileupload").submit();
        } catch (e) {
            try {
                $("#fileupload").submit();
            } catch (e) {
                alert(e);
            }
        }
    }
};
Run Code Online (Sandbox Code Playgroud)