【问题标题】:SCRIPT5: Access is denied in IE9 on xmlhttprequestSCRIPT5:在 IE9 中对 xmlhttprequest 的访问被拒绝
【发布时间】:2011-08-13 05:22:26
【问题描述】:
var xhttp=new XMLHttpRequest();
xhttp.open('GET', 'foo.xml', false);

F12 弹回:SCRIPT5:访问被拒绝。在第 95 行,即 xhttp.open 行。

我的 JavaScript 看起来格式正确,而 Firefox 做了我认为应该做的事情。

我已经阅读了很多与此问题非常相似的问题,因此我查看了同源策略,但考虑到 foo.xml 与.html 文件。我在本地 Intranet 上打开了脚本权限,并告诉 McAfee 休息五分钟,以确保安全。我什至尝试以管理员身份运行 IE,所以这真的不是权限问题吗?为什么 IE 会被拒绝访问本地文件?

【问题讨论】:

    标签: javascript xmlhttprequest internet-explorer-9


    【解决方案1】:
      $.ajax({
            url: '//freegeoip.net/json/',
            type: 'POST',
            dataType: 'jsonp',
            success: function(location) {
                alert(location.ip);
            }
        });
    

    此代码也适用于 https 网站

    【讨论】:

      【解决方案2】:
      【解决方案3】:

      我在 IE10 上遇到过类似的问题。我有一个解决方法是使用 jQuery ajax 请求来检索数据:

      $.ajax({
          url: YOUR_XML_FILE
          aync: false,
          success: function (data) {   
              // Store data into a variable
          },
          dataType: YOUR_DATA_TYPE,
          complete: ON_COMPLETE_FUNCTION_CALL
      });
      

      【讨论】:

        【解决方案4】:

        这个例子说明了如何使用 AJAX 从任何网站拉取资源。它适用于浏览器。我已经在 IE8-IE10、safari、chrome、firefox、opera 上测试过了。

        if (window.XDomainRequest) xmlhttp = new XDomainRequest();
        else if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest();
        else xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        
        xmlhttp.open("GET", "http://api.hostip.info/get_html.php", false);
        xmlhttp.send();
        
        hostipInfo = xmlhttp.responseText.split("\n");
        var IP = false;
        for (i = 0; hostipInfo.length >= i; i++) {
            if (hostipInfo[i]) {
        
                ipAddress = hostipInfo[i].split(":");
                if (ipAddress[0] == "IP") {
                    IP = ipAddress[1];
                }
            }
        }
        return IP;
        

        【讨论】:

          【解决方案5】:

          打开 Internet Explorer 开发工具, 工具 -> F12 开发者工具。 (我觉得你也可以按F12来获取)

          文档模式更改为标准。 (如果您更改文档模式,页面应该会自动刷新)

          问题应该得到解决。 享受

          【讨论】:

            【解决方案6】:

            如果找不到 .replace 方法的目标页面(我输入的页面名称不正确),也会遇到此错误消息(SCRIPT5:访问被拒绝。)。我知道是因为它刚刚发生在我身上,这就是为什么我去搜索有关错误消息含义的更多信息。

            【讨论】:

            • “替换方法”是什么意思?我收到此错误消息,但我不知道是什么原因造成的。
            【解决方案7】:

            很可能,您需要通过 SSL 提供 Javascript。

            来源:https://www.parse.com/questions/internet-explorer-and-the-javascript-sdk

            【讨论】:

              【解决方案8】:

              在 IE7、IE8 和 IE9 上,只需转到“设置”->“Internet 选项”->“安全”->“自定义级别”并更改“其他”下的安全设置,将“跨域访问数据源”设置为启用。

              【讨论】:

              • @Skurpi 同意,这就是使用 IE 的代价。在我们的应用程序中,我们声明仅支持 Firefox 和 Chrome。如果我们的客户想要使用 IE,那么他们需要确保启用此设置,我们的 IE 客户自愿更改了他们的设置。
              • 尝试从书签运行 XMLHTTPRequest 时,我不断收到此访问被拒绝错误。当我在页面上运行脚本时,它运行良好。这是唯一有效的解决方案。赢 7 IE 9。
              【解决方案9】:

              可能您正在请求外部资源,这种情况下 IE 需要 XDomain 对象。如何为所有跨域浏览器发出ajax请求,请参见下面的示例代码:

              Tork.post = function (url,data,callBack,callBackParameter){
                  if (url.indexOf("?")>0){
                      data = url.substring(url.indexOf("?")+1)+"&"+ data;
                      url = url.substring(0,url.indexOf("?"));
                  }
                  data += "&randomNumberG=" + Math.random() + (Tork.debug?"&debug=1":"");
                  var xmlhttp;
                  if (window.XDomainRequest)
                  {
                      xmlhttp=new XDomainRequest();
                      xmlhttp.onload = function(){callBack(xmlhttp.responseText)};
                  }
                  else if (window.XMLHttpRequest)
                      xmlhttp=new XMLHttpRequest();
                  else
                      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                  xmlhttp.onreadystatechange=function()
                  {
                      if (xmlhttp.readyState==4 && xmlhttp.status==200){
                          Tork.msg("Response:"+xmlhttp.responseText);
                          callBack(xmlhttp.responseText,callBackParameter);
                          Tork.showLoadingScreen(false);
                      }
                  }
                  xmlhttp.open("POST",Tork.baseURL+url,true);
                  xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
                  xmlhttp.send(data);
              }
              

              【讨论】:

                【解决方案10】:

                【讨论】:

                • 感谢MOTW的解释。我的 XML 文件没有,我什至添加了一个以查看是否可以更改错误消息。没有这样的运气。
                【解决方案11】:

                我认为问题在于文件在您的本地计算机上,而 IE 拒绝访问,因为如果它让脚本可以访问运行浏览器的计算机上的文件,那将是一个巨大的安全漏洞。
                如果您可以访问服务器或可以用作其他组件的其他组件,也许您可​​以尝试将文件放在上面,然后像从网站一样运行脚本。

                【讨论】:

                • 奇怪的是,如果这是真的,IE 有一个很大的安全漏洞——我发现我可以通过声明一个 XML 数据岛和使用 datafld inline 来加载和操作这个文件。并不是说我喜欢这个想法,但它是我目前所拥有的最好的。
                猜你喜欢
                • 2014-11-20
                • 2012-06-14
                • 2011-09-02
                • 1970-01-01
                • 2013-03-27
                • 2012-08-27
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多