所以我在A.html上有一个非常简单的网站
<body>
<p class="text">Some text</p>
</body>
和另一个在B.html的iframe中显示A的站点
<body>
<iframe id="frame" src="B.html" onload="onLoadHandler();"></iframe>
</body>
如果我打开文件B在我的谷歌铬浏览器,一切都显示为预期。但是,如果我在B.html中执行以下一行javascript代码(尝试将iframe中的p元素的颜色更改为粉红色)
function onLoadHandler()
{
var frameElement = document.getElementById('frame');
var frameDocument = frameElement.contentWindow ? frameElement.contentWindow : frameElement.contentDocument.defaultView;
var x = frameDocument.getElementsByClassName("text");
x[0].style.backgroundColor = "pink";
}
我在第二行得到以下错误:
Uncaught :阻止原名为"null“的帧访问原名为"null”的帧。协议、域和端口必须匹配。
这只是一个虚拟的测试,真正的场景是我们有网站www.company.com,在一个iframe运行www.verysecurebank.com,我们想编辑一些按钮的样式,在里面的iframe。所以是的域名永远都比不上。
不过,我想知道为什么浏览器会认为这是跨站点脚本,但是如果您使用开发人员工具( developer tools,f12),您可以在浏览器本身没有问题的情况下操作iframe的任何部分?我们可以使用开发工具成功地打开iframe蓝色中的所有按钮,但是在包含iframe的父html中不能使用javascript实现它。
发布于 2015-04-13 15:34:40
判断是否存在跨域的三条规则:
前端开发人员无法解决第一个和第二个问题。作为最后一个,如果两个域具有相同的主域名,则可以通过将document.domain设置为相同的主域名来解决。
https://stackoverflow.com/questions/29608990
复制相似问题