上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
12
返回列表 发新帖
楼主: xiaooooooo - 

关于iframe问题的求助

[复制链接]
  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5992

    回帖

    6780

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6780

    荣誉开发者喜迎中秋油中2周年生态建设者

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

    得到dom元素之后直接生成一个对象,根据uuid寻找对象不就行了
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复
    订阅

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    883

    回帖

    1381

    积分

    荣誉开发者

    积分
    1381

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2024-1-24 22:21:22 | 显示全部楼层
    xiaooooooo 发表于 2024-1-24 00:42
    [md]感谢大佬指点。现在我在代码上做了如下修改

    在主页面油猴脚本代码:

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

    使用道具 举报

  • TA的每日心情
    开心
    2023-7-13 09:56
  • 签到天数: 2 天

    [LV.1]初来乍到

    9

    主题

    93

    回帖

    120

    积分

    中级工程师

    积分
    120

    油中2周年油中3周年

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

    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    883

    回帖

    1381

    积分

    荣誉开发者

    积分
    1381

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2024-1-26 22:16:39 | 显示全部楼层
    xiaooooooo 发表于 2024-1-25 00:13
    [md]大佬 我加了这个判断还是不行。最终出来的效果还是iframe页面的数据缺失了一部分。

    我是这样修改的 ...

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

    使用道具 举报

    12
    返回列表 发新帖

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表