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

时间:2013-06-28 17:32:29

标签: jquery ajax internet-explorer cross-domain

场景:A.com上的网页A在B.com上有一个包含Page 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>

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>

Chrome中的结果(请注意控制台中的消息): enter image description here

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

enter image description here

3 个答案:

答案 0 :(得分: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>

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


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


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

答案 1 :(得分: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);
            }
        }
    }
};

答案 2 :(得分:4)

还要确保您没有从诸如Google Hosted Libraries等CDN加载您的jQuery资产。由于域不同,这违反了Microsoft用于防止Internet Explorer中的跨站点脚本的某些安全协议。