2013-08-21 56 views
1

如何访问到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”的帧。协议,域和端口必须匹配。

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

回答

3

您不能直接访问跨越原点的帧。在现代浏览器中,您可以使用postMessage

帧发送数据需要调用postMessage

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

和帧接收数据需要登记一个事件监听器来寻找消息,并反应给他们。

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

这是一个不错的主意,但我可以从同一个网站访问框架,不是吗?所以技术是可用的,但唯一的问题是SOP。你知道任何现代网络布朗,允许关闭? Access-Control-Allow-Origin有什么区别? – Tigran

+3

是的。是。不,不。 – Quentin