李恒道 发表于 2024-1-24 11:15:58

xiaooooooo 发表于 2024-1-24 10:58
有点设计不出来这个机制。比如我在生成iframe的时候带上一个id属性,但是有个问题在关闭窗口代码当中, i ...

得到dom元素之后直接生成一个对象,根据uuid寻找对象不就行了

cxxjackie 发表于 2024-1-24 22:21:22

xiaooooooo 发表于 2024-1-24 00:42
感谢大佬指点。现在我在代码上做了如下修改

在主页面油猴脚本代码:


我给你发的链接里有:在收到消息时,e.source即消息来源方的window
加一句判断即可:
e.source === iframe.contentWindow

xiaooooooo 发表于 2024-1-25 00:13:42

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匹配,才执行删除动作。但是不知道为啥还是不行

cxxjackie 发表于 2024-1-26 22:16:39

xiaooooooo 发表于 2024-1-25 00:13
大佬 我加了这个判断还是不行。最终出来的效果还是iframe页面的数据缺失了一部分。

我是这样修改的 ...

那这个就不好排查了,可能你代码有其他方面的问题,或者是addEventListener的问题,我记得他有去重机制的,可能你短时间添加的大量监听器被合并了,这个问题的话可以考虑只在window上绑一个监听,用一个全局的Map建立iframe和iframe.contentWindow的映射,然后监听器每次检查这个Map把对应的iframe移除掉(不一定有用,只是个优化思路)。
页: 1 [2]
查看完整版本: 关于iframe问题的求助