拒绝访问 IE 上的 jQuery 脚本

IT技术 javascript jquery ajax internet-explorer
2021-01-12 15:01:35

我有一个使用 jQuery 1.4.2 脚本的 iframe。相同的 iframe 被注入到httphttps站点。jQuery 脚本作为相对路径包含在主 HTML 文件中(例如,/scripts/jquery-1.4.2.min.js)。

进行 AJAX 调用时,Internet Explorer 拒绝访问。AJAX 正在调用另一个子域,但它使用了正确的协议。所有其他浏览器都可以工作,但 Internet Explorer 出现以下错误:

SCRIPT5:访问被拒绝。
jquery-1.4.2.min.js,第 127 行字符 344

我听说这个错误来自跨域 AJAX 调用。但为什么 IE 是唯一一个给我废话的人?有 IE 解决方案吗?

另外,这是我的 AJAX:

 $.ajax({
     url: thisURL,
     dataType: "json",
     data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()},
     success: function(ret){
         callback(ret)
     }
 });
6个回答

IE 要求您使用 XDomainRequest 而不是 XHR 进行跨站点,您可以尝试类似...

if ($.browser.msie && window.XDomainRequest) {
            // Use Microsoft XDR
            var xdr = new XDomainRequest();
            xdr.open("get", url);
            xdr.onload = function() {
                // XDomainRequest doesn't provide responseXml, so if you need it:
                var dom = new ActiveXObject("Microsoft.XMLDOM");
                dom.async = false;
                dom.loadXML(xdr.responseText);
            };
            xdr.send();
        } else {
            // your ajax request here
            $$.ajax({
                   url: thisURL,
                   dataType: "json",
                   data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()},
                   success: function(ret){
                               callback(ret)
                    }
            });

        }

参考

http://forum.jquery.com/topic/cross-domain-ajax-and-ie

不确定它是否适合您的场景

xdr = new XDomainRequest(); 
xdr.onload=function()
{
    alert(xdr.responseText);
}
xdr.open("GET", thisUrl); //thisURl ->your cross domain request URL 
//pass your data here
xdr.send([data]); 

你可以在这里找到更多指导

感谢这个解决方案和链接!不幸的是,我不知道如何使您的代码适合我的目的。你能帮忙吗?我在上面发布了ajax代码。具体来说,我想知道在 browser.msie 条件下,我将如何传入我的 json 参数以及如何在完成后使用返回数据调用回调。万分感谢!
2021-03-23 15:01:35
你究竟是如何发送数据的?你能举一个发送两个参数的例子吗?
2021-04-09 15:01:35
@3nigma:如何在 xdr 请求中进行同步调用,就像我们在 ajax 中所做的一样(例如“async”:flase)
2021-04-10 15:01:35
太好了,此外,对于那些在 php 中工作的人 - 服务器端代码..这很有帮助 ---- stackoverflow.com/questions/12025169/...
2021-04-12 15:01:35

这为我优雅地解决了这个问题:

https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest

只需在 jQuery 之后和脚本之前安装/编译,并像往常一样使用 $.ajax 方法,其余的在后面自动处理。

我想为任何阅读本文的人补充:确保使用与发起调用相同的协议,即 HTTP 或 HTTPS。
2021-04-10 15:01:35

您是否尝试使用最新的 JQuery(> jquery-1.8.0)?从 1.8.0 版本开始,他们解决了 IE9 的一些错误。或许这个也是。

http://blog.jquery.com/2012/08/30/jquery-1-8-1-released/

我有一个类似的问题,我的解决方案是使用 jsonp 而不是 json。这样我就不必为 IE 开发客户版本。

只有当 json 服务器主机支持回调请求变量或者您有权访问服务器并且可以添加支持时,您才能执行此操作。这是一个帮助我理解过程的页面。它的 .net mvc 专注于,但它提供了一个很好的 json 和 jsonp 之间的差异的视图。

http://blogorama.nerdworks.in/entry-EnablingJSONPcallsonASPNETMVC.aspx

检查您正在访问的域,以下响应标头应该在那里

"Access-Control-Allow-Methods" : "POST, GET, OPTIONS"
"Access-Control-Allow-Origin"  : "http://www.mydomain.com" or "*"

另一个域应该允许您的脚本请求。要添加到您的响应中的另一个标头是 P3P 标头。

"p3p" : "CP=IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"

它应该可以帮助你。

遇到同样的问题,我在 IE9 中激活了我的网络捕获,它甚至没有向服务器发出请求,所以这可能无法解决它。
2021-03-15 15:01:35