【问题标题】:Access denied to jQuery script on IE拒绝访问 IE 上的 jQuery 脚本
【发布时间】:2011-07-02 12:48:28
【问题描述】:

我有一个使用 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)
     }
 });

【问题讨论】:

  • 对于跨域请求,您应该更喜欢 dataType: "jsonp"
  • @PippoFranco 为什么会这样?

标签: javascript jquery ajax internet-explorer


【解决方案1】:

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]); 

您可以找到更多指导here

【讨论】:

  • 感谢您提供此解决方案和链接!不幸的是,我不知道如何将您的代码用于我的目的。你能帮忙吗?我在上面发布了ajax代码。具体来说,我想知道在 browser.msie 条件下,我将如何传递我的 json 参数以及如何在完成后使用返回数据调用回调。非常感谢!
  • 您究竟是如何发送数据的?你能举一个发送两个参数的例子吗?
  • @3nigma : 如何在 xdr 请求中进行同步调用,就像我们在 ajax 中一样(例如 "async": flase )
  • 太棒了,另外,对于那些使用 php - 服务器端代码的人来说,这很有帮助 ---- stackoverflow.com/questions/12025169/…
【解决方案2】:

这很好地为我解决了这个问题:

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

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

【讨论】:

  • 我想为任何阅读此内容的人添加:确保使用与发起呼叫相同的协议,即 HTTP 或 HTTPS。
【解决方案3】:

你试过用最新的JQuery(> jquery-1.8.0)吗?从 1.8.0 版本开始,他们解决了一些 IE9 的 bug。也许这个也是。

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

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

      【解决方案5】:

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

      "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 中激活了网络捕获,它甚至没有向服务器发出请求,所以这可能无法解决。
      【解决方案6】:

      我遇到了类似的问题。 我正在使用文件上传控件,但它被隐藏了,我有另一个元素试图控制文件上传和事件以 ajax 方式上传文件

      尝试直接使用文件上传控件。这解决了我的应用程序中的问题。

      【讨论】:

        【解决方案7】:

        我得到了这个错误(因此在这里谷歌),但原因非常不同。因此,如果您没有跨站点并且仍然收到此访问被拒绝错误:仔细检查 value sent
        假设您使用以下错误的表达式影响其中一个变量:

        urlVar = $("theID").val // without () this was the error!
        

        [...]ajax 调用:

        data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()},
        

        Google/FF 对此没有任何问题(检查什么是接收服务器端...)但 IE 拒绝发送这个!

        【讨论】:

          【解决方案8】:

          我将我的 JQuery 从版本 1.10.1 更改为 1.10.2,它似乎已经为我解决了这个问题。

          【讨论】:

            【解决方案9】:

            似乎 MS 正在寻找自己的做事方式,而不是采纳行业建议。我在这里找到了解决方案:
            https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest/blob/master/jQuery.XDomainRequest.js

            【讨论】:

              【解决方案10】:

              只需添加 'callback=?'在您的 ajax URL 请求上,如下所示: http://wsvdmeer.blogspot.com.es/2012/08/bugfix-getjson-not-working-in-ie.html

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-03-13
                • 2011-09-26
                • 2013-01-30
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2023-04-02
                • 2013-08-06
                相关资源
                最近更新 更多