Javascript 访问iframe之外的元素

Javascript 访问iframe之外的元素,javascript,iframe,Javascript,Iframe,我有一个文件:1.html和一个iframe 我想从iframe 我该怎么做? 我试过: top.getElementById("myelement") top.document.getElementById("myelement") parent.getElementById("myelement") parent.document.getElementById("myelement") 但是它不起作用 对于跨源资源,iframe和父文档之间不可能通信。仅当iframe和包含页面来自同一

我有一个文件:1.html和一个iframe 我想从iframe
我该怎么做?
我试过:

top.getElementById("myelement")
top.document.getElementById("myelement")  
parent.getElementById("myelement")
parent.document.getElementById("myelement")

但是它不起作用

对于跨源资源,iframe和父文档之间不可能通信。仅当iframe和包含页面来自同一主机、端口和协议时,它才会工作-例如和

对于跨源资源,您可以使用在两者之间进行通信,但这仅在浏览器支持此方法并且您可以控制这两种资源时才有用

编辑-假设两个资源来自同一来源


在iframe中,window.parent指的是父文档的全局对象,而不是文档对象本身。我相信您需要使用
parent.document.getElementById

假设这不是问题,您可以使用
parent.document
访问元素并对其进行操作


iframe和父文档之间无法通信 跨境资源

这在很多方面都是错误的,我甚至不想知道从哪里开始。当然,跨域请求和算法交换有着悠久的历史,它们都有很好的文档记录,现在也可以使用,例如,可以通过JQuery启动JSON请求,甚至是简单的XMLHttp请求,您甚至可以加载整个.js文件并将它们注入到您的代码中——在远程源代码中注入代码当然需要一个合适的接口;一个人可以通过和负责人的沟通来实现这样的目标,只要友好地问他们,如果你的项目有意义并且有用处,他们可能会合作


为了回答这个问题:访问整个文档会增加事先传输文档的需要——我建议使用XML,因为DOM树和XML几乎可以互换。通过加载树(对于远程主机),将其加载到,然后按您所需访问它。。。听起来很容易,如果你有一些经验,这很容易。如果你在同一句话中再次读到“跨域”和“不可能”,你不妨忽略海报——有很多人不知道他们在说什么;-)

父文档
不工作


对于跨源资源,您可以使用
window.postMessage
在两者之间进行通信,但这仅在浏览器支持此方法并且您可以控制这两种资源时才有用。

parent.document.getElementById确实有效!!!。也许我忽略了这个。。。我必须在原始文档(jsp)和iframe(也是jsp)之间进行通信。。涉及会话bean非常复杂。。。把它丢在什么地方了。。再次感谢。我发现了一些与此相关的内容,如果您使用parent.myfunction()调用父页面上的函数,您仍然需要这样做才能访问这些元素。至少我在使用Firefox时是这样做的。
parent.document.getElementById
工作得很好……谢谢你,你说的基本上是客户端html抓取。听起来OP不想这么做。在“跨域”和“不可能”方面,人们已经经历了很多麻烦来阻止iFrame从其他域访问windows。我认为你对这个问题理解得不太清楚。它的可能复本被屏蔽了<代码>未捕获的DomeException:阻止了具有原点的帧“http://fiddle.jshell.net“从访问交叉原点帧。在http://fiddle.jshell.net/salman/tye5R/show/light/:39:12@shingom这种方法在实践中确实有效。我相信由于站点处理iframe的方式,jsfiddle上有一个错误。