【问题标题】:SCRIPT70: Permission denied on JQuery Ajax PostSCRIPT70:JQuery Ajax Post 上的权限被拒绝
【发布时间】:2016-10-18 15:25:54
【问题描述】:

我最近遇到了这个奇怪的错误。这是整个过程的流程。

  1. 有一个对网站的 JQuery ajax post 调用将刷新 div 的内容。它将参数传递给该网站并返回 HTML 脚本。
  2. 如果post成功,它会先清除div,并使用从该网站检索到的返回值重写它。

错误发生在第 2 点。

奇怪的是:

在我的机器(Windows 8)和虚拟机(Windows 10)中都可以正常工作。我对两者都使用了相同的浏览器(IE 11 和 Edge)。但是,我的同事无法执行第 2 点,因为他收到客户端错误 SCRIPT70: Permission denied。 他正在使用 Edge。

我将在下一次更新中发布部分代码。但到目前为止,我已经在安全性方面对其进行了检查,但实际上没有。

我该如何解决这个问题?

更新

这是通过 JQuery Ajax Post 调用一个网站(或 aspx)并检索和更新 div 的代码。

function RefreshDiv(isChild) {
  var data = {
    ActionType: "AJAX",
    Action: "Refresh"
  };

  $.post("RefreshDivContents.aspx", data, function (result) {
    if(result != '') {
      var divItems;

      if(isChild) {
          divItems = window.parent.$("#TopDiv").find("#DivItems");
      }
      else {
          divItems = $("#DivItems");
      }

      divItems.empty(); // error hit here.
      divItems.append(result);
    }
  });
}

更新 #2 我更新了示例代码以获取更多信息。另外,我把错误放在了发生的地方,但我不知道它为什么会出现在那里。它应该只清除项目。

更新 #3 根据 Jacob 的回复,我很好奇这两个 iframe src 的协议和端口号是什么。下面是基于控制台的结果。

【问题讨论】:

  • 您朋友使用的网址是什么?这些类型的错误通常是由尝试发出跨域请求或尝试从file:// URL 执行Ajax 等原因引起的。您应该收集更多关于您的同事运行代码的方式与您的方式之间的区别的详细信息。也可能存在不同的浏览器安全设置。
  • 这是一个 Web 应用程序,它正在调用其中一个 aspx 页面。
  • 在同一个域还是在不同域?
  • 在同一个域中。
  • @Jacob,我更新了问题。我希望你能看看这个。我只是觉得很奇怪,当它遇到.empty() 时,它会抛出SCRIPT70 错误。

标签: jquery windows-10 internet-explorer-11 microsoft-edge jquery-ajaxq


【解决方案1】:

这看起来有问题:

divItems = window.parent.$("#TopDiv").find("#DivItems");

我从这个 sn-p 中得知关键问题在于 Same-origin policy。一个来源的文档不能更新另一个来源的内容。例如,在这种情况下,您的代码看起来可能在 iframe 中运行并尝试更新父文档中的 div。如果两个文档的来源相同,则没有问题。

这就是我询问 URL 的原因。必须考虑两个文档的 URL 是什么,才能找到使脚本正常工作的解决方案:

如果文档 A 来自 http://example.com 而文档 B 来自 http://www.example.com,则文档 B 只需运行 document.domain = 'example.com'; 即可更改来源。

如果两个文档的端口号不同,但域和协议相同,则它们都可以将它们的document.domain 设置为相同的域,以从它们的来源中清除端口号,使它们兼容。

如果一个人使用 HTTPS,另一个人使用 HTTP,那么令人惊讶的是,非安全框架会完全加载,即使加载了,您也很难访问另一个文档。

如果两者的域名完全不兼容,则必须实现CORS

总而言之,您需要了解同源策略,这确实很痛苦,但可以保护用户免受恶意脚本的侵害,然后构建您的应用以适应它。

【讨论】:

  • 我实际上尝试将 url 添加到 internet 选项中的受信任站点,但它仍然在 Edge 中遇到错误。您对此有什么想法吗?
  • 但是,我仍然觉得很奇怪,因为这两个文件在同一个文件夹和同一个域中。
  • 文件无关紧要,网站是否可信;文档的实际 URL 是什么?这才是最重要的。
  • 我还尝试将父 iframe src 设置为具有完整的 URL,并且当我调用 jquery 帖子但它仍然不起作用。
  • 这很好奇。我发现这个旧的 jQuery 错误仍然可能是相关的;也许这是一个 jQuery 问题:bugs.jquery.com/ticket/14535
猜你喜欢
  • 2011-07-18
  • 2011-11-29
  • 2013-08-07
  • 2014-03-16
  • 2011-06-13
  • 1970-01-01
  • 2015-03-13
  • 2016-04-11
  • 1970-01-01
相关资源
最近更新 更多