有点设计不出来这个机制。比如我在生成iframe的时候带上一个id属性,但是有个问题在关闭窗口代码当中, i ...
得到dom元素之后直接生成一个对象,根据uuid寻找对象不就行了 xiaooooooo 发表于 2024-1-24 00:42
感谢大佬指点。现在我在代码上做了如下修改
在主页面油猴脚本代码:
我给你发的链接里有:在收到消息时,e.source即消息来源方的window
加一句判断即可:
e.source === iframe.contentWindow cxxjackie 发表于 2024-1-24 22:21
我给你发的链接里有:在收到消息时,e.source即消息来源方的window
加一句判断即可:
...
大佬 我加了这个判断还是不行。最终出来的效果还是iframe页面的数据缺失了一部分。
我是这样修改的:
```
function waitAndRemove(iframe) {
return new Promise(resolve => {
const ListenMessage= (e)=> {
if(e.data==='close_window' && e.source === iframe.contentWindow){
window.removeEventListener('message', ListenMessage)
//关闭窗口代码
iframe.remove();
}
resolve()
};
window.addEventListener('message', ListenMessage);
});
}
```
我把两个判断条件并列了e.data==='close_window' && e.source === iframe.contentWindow 因为只有当确认了iframe的src属性匹配,接收到的data匹配,才执行删除动作。但是不知道为啥还是不行 xiaooooooo 发表于 2024-1-25 00:13
大佬 我加了这个判断还是不行。最终出来的效果还是iframe页面的数据缺失了一部分。
我是这样修改的 ...
那这个就不好排查了,可能你代码有其他方面的问题,或者是addEventListener的问题,我记得他有去重机制的,可能你短时间添加的大量监听器被合并了,这个问题的话可以考虑只在window上绑一个监听,用一个全局的Map建立iframe和iframe.contentWindow的映射,然后监听器每次检查这个Map把对应的iframe移除掉(不一定有用,只是个优化思路)。
页:
1
[2]