本帖最后由 xiaooooooo 于 2024-1-23 00:04 编辑
感谢大佬指点。我在您的代码结合我的需求做了一点改动,原因在于如果以'load'事件来作为关闭iframe的时机的话,会导致我在iframe页面上注入的代码还没有来得及执行完毕,这个iframe就被关闭了。
因此我试着参照李恒道大佬的postMessage方法进行改造,参考链接
在主页面增加以下代码:
function waitAndRemove(iframe) {
return new Promise(resolve => {
const ListenMessage= (e)=> {
if(e.data==='close_window'){
iframe.removeEventListener('message', ListenMessage)
//关闭窗口代码
iframe.remove();
resolve()
}
};
iframe.addEventListener('message', ListenMessage);
});
}
。。。。。。
(async function() {
await waitAndRemove(iframe);
})();
。。。。。。
在子页面(iframe)打开的页面注入如下代码:
function EmitParentClose(){
let parentif = window.top;
parentif.postMessage('close_window')
}
。。。。。。
// 发送关闭信号
EmitParentClose();
。。。。。。
但是并未奏效,不知原因何在。另外我也想请教一下,这个postMessage发送回来的这个消息,是应当打印在dev tools的console里面吗?