js/jquery获取其他窗口的元素
1、获取 iframe 中的元素
1 | //获取iframe页面中的document |
2、获取父级窗口元素
1 | //js |
页面嵌套
1、 在window对象上共享父级对象
效果,iframe 子页面 可以访问父级 window对象上共享的对象
问题,如果两个窗口一级域名相同,只是二级域名不同,那么设置上一节介绍的document.domain属性,就可以规避同源政策,拿到DOM。
2、片段识别符
片段识别符(fragment identifier).
片段标识符(fragment identifier)指的是,URL的#号后面的部分,比如http://example.com/x.html#fragment的#fragment。如果只是改变片段标识符,页面不会重新刷新。
父窗口可以把信息,写入子窗口的片段标识符。
// 父页面
window.onhashchange() {
var message = window.localtion.hash;
...
}
// 子页面
parent.location.href = target + '#' + hash
3、window.name
浏览器窗口有window.name属性。这个属性的最大特点是,无论是否同源,只要在同一个窗口里,前一个网页设置了这个属性,后一个网页可以读取它。
// 父页面
1 | // 设置 |
// 子页面
1 | // 访问 |
4、window.postMessage
跨文档通信API(Cross-document messaging)
HTML5为了解决这个问题,引入了一个全新的API:跨文档通信 API(Cross-document messaging)。
这个API为window对象新增了一个window.postMessage方法,允许跨窗口通信,不论这两个窗口是否同源。
父窗口 aa.com
1 | var popup = window.open('http://bbb.com', 'title'); |
子窗口 bb.com
1 | window.addEventListener('message', receiveMessage); |
message事件的事件对象event,提供以下三个属性。
-event.source:发送消息的窗口
-event.origin: 消息发向的网址
-event.data: 消息内容
页面间的通信机制
- 父子窗口通信
- postMessage
- 浏览器 tab 页面通信
- localStorage
- WebSocket
- BroadcastChannel
- SharedWorker
- 本文作者: 王不留行
- 本文链接: https://wyf195075595.github.io/2022/06/17/programming/javascript/iframe/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!