当所有文件都位于本地同一目录中时,为什么会出现同源策略错误?

Why am I getting a Same-origin policy error while all files are locally in the same directory?

提问人:jiggy1965 提问时间:3/4/2018 更新时间:3/4/2018 访问量:262

问:

我有一个主要的html文件,它通过iframe在同一目录中加载另一个html文件。主页上有一个按钮,用于定位 iframe 中的 html 文件。它使用这个函数:

    <script>
function myFunction() {
    var x = document.getElementsByTagName("iframe")[0].contentWindow;
    x.exportRoot.gotoAndPlay(2);
}
</script>

Live 它按预期工作:当我单击按钮时,它会从 iframe 中启动 Animate CC 动画。但是,当我在本地查看文件时,我在控制台窗口中收到以下错误消息:

SecurityError(DOM 异常 18):阻止源为“null”的帧访问源为“null”的帧。协议、域和端口必须匹配。

我读到这与同源策略有关。如果主页作为 iframe 页面位于另一个域中,这将是有道理的。但是两个 html 文件都在本地同一个目录中。

我的浏览器(尝试了 Safari 和 Chrome)仍然将其视为两个不同的域?我可以更改一些东西以使其在本地也能使用吗?

JavaScript 的HTML

评论

2赞 Patrick Evans 3/4/2018
在本地,您的意思是协议是?如果是这样,这就是为什么本地加载的文件在同源策略中更严格的原因file:///
0赞 Renardo 3/4/2018
我建议你发布你的标签。<iframe>
0赞 jiggy1965 3/4/2018
这确实是我正在使用 file:///。因此,我可以在上线之前测试html文件。那么,在本地测试时,有没有办法绕过该同源策略?
0赞 Renardo 3/4/2018
你能用Firefox吗?它在这方面没有 Safari 那么严格。请参阅 codeproject.com/Questions/1195078/... 。或者使用本地 Web 服务器。
0赞 Joost Meijer 3/4/2018
@jiggy1965 直到 / 的域必须完全相同。

答:

0赞 gman 3/4/2018 #1

要在本地进行开发,您应该使用一个简单的 Web 服务器。设置时间不到 2 分钟。这里有一堆

Python的http.server(或SimpleHTTPServer)的更快替代方案是什么?

不要在您的浏览器中禁用网络安全。一个忘记的点击,你的机器可能被拥有了。即使您认为风险很低,当使用简单 Web 服务器的正确方法如此简单时,为什么要冒任何风险呢?