我最近遇到了这个奇怪的错误。这是整个过程的流程。
错误发生在第2点。
这是奇怪的事情:
在我的机器中它运行正常(Windows 8)以及虚拟机(Windows 10)。我使用相同的浏览器(IE 11和Edge)。但是,我的同事无法做到第2点,因为他得到了客户端错误 SCRIPT70:权限被拒绝。他正在使用Edge。
我将在下次更新时发布部分代码。但到目前为止,我已经在安全性方面进行了检查,但确实没有。
如何解决此问题?
更新
这是通过JQuery Ajax Post调用一个网站(或aspx)的代码,并检索和更新div。
use strict;
use warnings 'all';
use autodie;
chdir '/path/to/outfiles';
my %data;
while ( my $file = glob '*.txt' ) {
open my $fh, '<', $file;
while ( <$fh> ) {
my ($gene, $value) = split;
next unless $gene =~ /\|ENSMUSG/;
push @{ $data{$gene} }, $value;
}
}
print join(',', $_, @{ $data{$_} }), "\n" for keys %data;
更新#2 我更新了示例代码以获取更多信息。此外,我放置了错误发生的地方,但我不知道为什么会发生错误。它应该只清除这些项目。
更新#3 基于雅各布的回复,我很好奇两个iframe src的协议和端口号是什么。以下是基于控制台的结果。
答案 0 :(得分:1)
这看起来有问题:
divItems = window.parent.$("#TopDiv").find("#DivItems");
我从这个片段中了解到关键问题是Same-origin policy。一个来源的文档无法更新另一个来源的内容。例如,在这种情况下,您的代码可能正在iframe
中运行并尝试更新父文档中的div。如果这两个文件的来源相同,那就没问题了。
这就是我询问网址的原因。必须考虑两个文档的URL是什么,以找到使脚本正常工作的解决方案:
如果文件A来自http://example.com
且文件B来自http://www.example.com
,则文件B只需运行document.domain = 'example.com';
即可更改来源。
如果这两个文件具有不同的端口号但是相同的域名和协议,他们都可以将document.domain
设置为同一个域,从其起源中清除端口号,使它们兼容。
如果一个人使用HTTPS而另一个人使用HTTP,那么加载非安全框架会令人惊讶,即使这样,你也很难访问其他文档。
如果两者的域名完全不兼容,则必须实施CORS。
总而言之,您需要了解同源策略,这是一个真正的痛苦,但保护用户免受恶意脚本的侵害,然后构建您的应用程序以适应它。