访问iframe外部的元素
Accessing an element outside of iframe
我有一个文件:1.html和一个iframe。
我想从iframe访问一个元素(比如myelement),它存在于1.html(在iframe之外)。我该怎么做呢?
I tried:
top.getElementById("myelement")
top.document.getElementById("myelement")
parent.getElementById("myelement")
parent.document.getElementById("myelement")
但它没有工作!!
iframe和父文档之间的通信对于跨源资源是不可能的。只有当iframe和包含页面来自相同的主机,端口和协议时,它才会工作-例如http://example.com:80/1.html和http://example.com:80/2.html
对于跨源资源,您可以使用window.postMessage
在两者之间进行通信,但这只有在浏览器支持该方法并且您可以控制这两个资源时才有用。
编辑-假设两个资源来自同一来源
在iframe中,window。Parent引用父文档的全局对象,而不是文档对象本身。我相信你需要使用parent.document.getElementById
假设同源策略没有问题,您可以使用parent.document
访问元素,并对它们进行操作。
这里是Demo,这里是外部框架源,这里是iframe源。
parent.document
不工作
对于跨域资源,您可以使用window。postMessage在两者之间进行通信,但这只有在浏览器支持该方法并且您可以控制这两个资源时才有用。
不能在iframe和父文档之间进行通信对于跨域资源
这在很多方面都是错误的,我甚至不知道从哪里开始。当然,跨域请求和算法交换有很长的历史,现在都有很好的文档和工作,一个人可以通过JQuery启动json请求甚至简单的xmlhttp请求,例如,你甚至可以加载整个。js文件并将它们注入到你的代码中——在远程源中注入代码当然需要一个合适的接口;一个人可以通过与负责人沟通来实现这样的事情,只要友好地问他们,如果你的项目有意义,有用处,也许他们会合作。
要回答这个问题:访问整个文档将需要事先传输它——出于这个目的,我建议使用XML,因为dom树和XML几乎可以互换。通过.get()加载树。ajax(用于远程主机),将其附加到this并像您想要的那样访问它…听起来很容易,如果你有一些经验,这是很容易的。如果你曾经在同一个句子中再次看到"跨域"answers"不可能",你可能会忽略海报-有很多人不知道他们在说什么;-)
- 单击元素外部时进行JQuery
- 如何使toggleClass()在元素外部单击时工作
- 如果在Div元素外部单击,请关闭该元素
- 如何使用AngularJsOnly在元素外部单击时关闭元素
- d3.js在元素外部单击时,隐藏该元素
- addClass”;输入无效”;输入dos't显示,直到我在输入元素外部单击为止
- 在元素外部单击时激发事件的指令
- 在 jQuery 中从父元素外部单击“this”时如何切换子元素
- 如何在元素外部单击时使用 jQuery 隐藏元素
- 我们如何检测元素外部的双击
- Javascript / jQuery - 点击iPhone上的元素外部
- 当我在单击元素外部时,如何删除添加到单击元素的功能
- 在触发元素外部单击时隐藏元素
- 处理通过聚焦在子元素上并通过单击子元素外部触发的父元素的模糊事件
- 确定焦点何时出现在元素外部
- 在父元素外部单击时删除类
- 在弹出元素外部单击时关闭bPopup
- 使用JavaScript检测元素外部的点击
- 如何检测元素外部的点击,但该元素有子元素
- 如何检测元素外部的触摸端事件