iframe中的网站不在同一个域中,但都是我的,我想在iframe和父站点之间进行通信。这可能吗?
当前回答
你也可以使用
postMessage消息(,' * ');
其他回答
窗外。顶级物业应该能满足你的需要。
如。
alert(top.location.href)
看到 http://cross-browser.com/talk/inter-frame_comm.html
在2018年和现代浏览器中,您可以将自定义事件从iframe发送到父窗口。
iframe:
var data = { foo: 'bar' }
var event = new CustomEvent('myCustomEvent', { detail: data })
window.parent.document.dispatchEvent(event)
家长:
window.document.addEventListener('myCustomEvent', handleEvent, false)
function handleEvent(e) {
console.log(e.detail) // outputs: {foo: 'bar'}
}
PS:当然,你也可以以相反的方向发送事件。
document.querySelector('#iframe_id').contentDocument.dispatchEvent(event)
你也可以使用
postMessage消息(,' * ');
使用event.source.window.postMessage发送回发送方。
从Iframe
window.top.postMessage('I am Iframe', '*')
window.onmessage = (event) => {
if (event.data === 'GOT_YOU_IFRAME') {
console.log('Parent received successfully.')
}
}
然后从父母那里说回来。
window.onmessage = (event) => {
event.source.window.postMessage('GOT_YOU_IFRAME', '*')
}
对于不同的域,不可能直接调用方法或访问iframe的内容文档。
您必须使用跨文档消息传递。
Parent -> iframe
例如在顶部窗口:
myIframe.contentWindow.postMessage('hello', '*');
在iframe中:
window.onmessage = function(e) {
if (e.data == 'hello') {
alert('It works!');
}
};
Iframe ->父级
例如在顶部窗口:
window.onmessage = function(e) {
if (e.data == 'hello') {
alert('It works!');
}
};
在iframe中:
window.top.postMessage('hello', '*')
推荐文章
- 如何使用Jest测试对象键和值是否相等?
- 将长模板文字行换行为多行,而无需在字符串中创建新行
- 如何在JavaScript中映射/减少/过滤一个集?
- 如何嵌入HTML到IPython输出?
- 如何删除/忽略:悬停css风格的触摸设备
- Bower: ENOGIT Git未安装或不在PATH中
- HTML5文本区域占位符不出现
- 添加javascript选项选择
- 在Node.js中克隆对象
- HTML tabindex属性是什么?
- 我如何捕捉Ajax查询后错误?
- 为什么在JavaScript的Date构造函数中month参数的范围从0到11 ?
- HTML按钮调用MVC控制器和动作方法
- 使用JavaScript更改URL参数并指定默认值
- 在window.setTimeout()发生之前取消/终止