我最近遇到了这个奇怪的错误。以下是整个过程的流程。
错误发生在第2点。
奇怪的是:
在我的机器中,它工作得很好(Windows 8),在虚拟机(Windows 10)中也是如此。我使用相同的浏览器(IE 11和Edge)来实现这两种浏览器。但是,我的同事无法完成第2点,因为他的客户端错误SCRIPT70:权限被拒绝。他正在使用。
我将在下一次更新中发布部分代码。但到目前为止,我已经检查过它的安全性,但没有真正的。
我该怎么解决这个问题?
更新
下面是通过JQuery Ajax调用一个网站(或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 I更新了示例代码以获得更多信息。此外,我把错误发生的地方,但我不知道它为什么击中那里。它应该只清除项目。
基于雅各布的回复,更新#3,我好奇这两个iframe的协议和端口号是什么,下面是基于控制台的结果。
发布于 2016-10-14 03:42:15
这似乎有问题:
divItems = window.parent.$("#TopDiv").find("#DivItems");
我从这个片段中可以看出,关键问题在于同源政策。一个来源的文档不能更新另一个来源中的内容。例如,在本例中,您的代码可能在iframe
中运行,并试图更新父文档中的div。如果这两份文件来源相同,那就没问题了。
这就是为什么我会问关于URL的问题。必须考虑两个文档的URL是什么,才能找到使脚本正常工作的解决方案:
如果文档A来自http://example.com
,文档B来自http://www.example.com
,那么document B只需运行document.domain = 'example.com';
就可以更改起源。
如果这两个文档具有不同的端口号,但具有相同的域和协议,则它们都可以将document.domain
设置为相同的域,以从它们的起源中删除端口号,从而使它们兼容。
如果其中一个使用HTTPS,而另一个使用HTTP,那么加载的非安全帧是很奇怪的,即使加载了,您也将很难访问另一个文档。
如果这两个域名完全不兼容,则必须实现CORS。
总之,您需要了解相同的来源策略,这是一个真正的痛苦,但保护用户免受恶意脚本,然后构建您的应用程序来适应它。
https://stackoverflow.com/questions/39950538
复制相似问题