SCRIPT70:JQuery Ajax Post上的权限被拒绝

时间:2016-10-10 02:28:58

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

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

  1. 有一个JQuery ajax调用一个网站,它将刷新div的内容。它会将参数传递给该网站,并返回HTML脚本。
  2. 如果帖子成功,它将首先清除div并使用从该网站检索到的返回值重写它。
  3. 错误发生在第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的协议和端口号是什么。以下是基于控制台的结果。

    enter image description here

1 个答案:

答案 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

总而言之,您需要了解同源策略,这是一个真正的痛苦,但保护用户免受恶意脚本的侵害,然后构建您的应用程序以适应它。