我有一个包含 iframe
的 HTML 文档。每当我尝试使用 JS 访问或修改此 iframe
时,我都会收到 Error: Permission denied to access property "document"
。
我正在使用 frame.contentWindow.document.body.innerHTML
或 frame.contentWindow.document.body.onload
或类似的属性来访问或修改 iframe
。 (在给定的代码中,iframe
被称为 frame
。)
对于我正在开发的网络应用程序,访问这些属性是必要的,没有这些(或类似的替代方案)我就做不到。
最佳答案
访问并修改 iframe
中的网页其他网站的 s 被称为 Cross-site scripting或 XSS,它是恶意黑客用来掠夺毫无戒心的受害者的一种技术。
浏览器制造商实现了名为“同源策略”的策略,以防止此类行为和任意执行 JS 代码。
可以通过在 iframe
中托管父文档和文档来防止此错误在相同的域和子域中,并确保使用相同的协议(protocol)加载文档。
不兼容页面的示例:
-
http://www.example.org
&http://www.example2.com
-
http://abc.example.org
&http://xyz.example.com
-
http://www.example.org
&https://www.example.com
Cross-Origin Resource Sharing是这个问题的解决方案。
例如:
如果http://www.example.com
想分享http://www.example.com/hello
与 http://www.example.org
, 标题可以与文档一起发送,如下所示:
Access-Control-Allow-Origin: http://www.example.org
要用 HTML 发送它,只需将它放在 <META HTTP-EQUIV="...">
中标签,像这样:
<head>
...
<META HTTP-EQUIV="Access-Control-Allow-Origin" CONTENT="http://www.example.org">
...
</head>
关于javascript - 错误 : Permission denied to access property "document",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36333978/