2

这很烦人。我正在努力做到这一点,以便当我按 F5 时,框架会重新加载。我已经知道了,如果焦点在主页(而不是 iframe)上,它就可以工作。但是,当我尝试实施类似的解决方案,甚至尝试与 iframe 进行通信时,我会收到“不安全的 JavaScript 尝试访问框架”。更具体地说,确切的错误是:

不安全的 JavaScript 尝试从 URL http://spow.tk/projects/Explorer/02/的框架访问具有 URL http://www.spow.tk/projects/test的框架。域、协议和端口必须匹配。

请帮忙,因为这真的很痛苦。谢谢

4

2 回答 2

2

这两个站点位于不同的域上。由于 Javascript 的安全限制,您不能跨域编写脚本。查看WikipediaMozilla了解更多信息(引用 Mozilla 以防止链接失效):

同源策略防止从一个源加载的文档或脚本从另一个源获取或设置文档的属性。该政策可以追溯到 Netscape Navigator 2.0。

如果两个页面的协议、端口(如果指定)和主机相同,则 Mozilla 认为两个页面具有相同的来源。下表给出了与 URL http://store.company.com/dir/page.html的来源比较示例:

URL                                                 Outcome   Reason
http://store.company.com/dir2/other.html            Success  
http://store.company.com/dir/inner/another.html Success  
https://store.company.com/secure.html           Failure   Different protocol
http://store.company.com:81/dir/etc.html            Failure   Different port
http://news.company.com/dir/other.html          Failure   Different host

同源规则有一个例外。脚本可以将 document.domain 的值设置为当前域的后缀。如果这样做,则较短的域将用于后续的来源检查。例如,假设http://store.company.com/dir/other.html文档中的脚本执行以下语句:

document.domain = "company.com"; 该语句执行后,页面将通过http://company.com/dir/page.html的来源检查。但是,同理,company.com 无法将 document.domain 设置为 othercompany.com。

端口号由浏览器单独保存。对 setter 的任何调用,包括 document.domain = document.domain 都会导致端口号被 null 覆盖。因此,仅在第一个设置 document.domain = "company.com" 无法使 company.com:8080 与 company.com 对话。它必须在两者中设置,以便端口号都为空。

于 2012-12-05T00:16:47.110 回答
0

spow.tk并且www.spow.tk被认为是不同的域。

但是,您可以做的一件事是强制您的网站使用其中一种,以免再次出现此问题。例如,如果您使用的是 Apache,您可以修改您的.htaccess以将所有请求重定向spow.tkwww.spow.tk (或者如果您喜欢的话)www.spow.tkspow.tk即使您的用户或代码引用了一个域,请求也会被重定向到您指定的域。

于 2012-12-05T00:20:21.460 回答