如何访问内部框架

时间:2013-08-21 21:58:50

标签: javascript cross-domain xss

如何访问iframe:

var iframe = document.getElementById('sitefield1');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
var elem = innerDoc.getElementsByClassName("myclass")[0];

主页面是test1.ru,iframe是test2.ru(两者都在我的电脑上)。在.htaccess中

Header add Access-Control-Allow-Origin "http://test1.ru/2"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
Header add Access-Control-Expose-Headers "X-InlineCount"

是否可以进入iframe模块? 我是这个网站的所有者(做一些测试),也可以添加任何设置到我的Firefox。 我发现这个代码在IE中不起作用(即使我在不​​同的域之间启用了加密,并且关闭了XSS过滤器)。 Chrome看起来不再支持--disable-web-security了...... Chrome的错误是 阻止具有原点“test1”的帧访问具有原点“test2”的帧。协议,域和端口必须匹配。

任何想法都会对此有所帮助。

1 个答案:

答案 0 :(得分:3)

您无法直接访问原点的框架。在现代浏览器中,您可以使用postMessage

发送数据的帧需要调用postMessage

top.postMessage({ foo: "bar" }, "*");

并且接收数据的帧需要注册一个事件监听器来查找消息并对它们作出反应。

window.addEventListener("message", receiveMessage, false);
function receiveMessage(evt) {
    alert(event.data.foo);
}