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

异步获取元素的脚本库 ElementGetter

  [复制链接]
  • TA的每日心情
    开心
    2024-7-30 00:00
  • 签到天数: 122 天

    [LV.7]常住居民III

    29

    主题

    601

    回帖

    542

    积分

    专家

    积分
    542

    油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-6-5 00:05:51 | 显示全部楼层
    cxxjackie 发表于 2023-6-4 22:43
    我没这个云盘账号来测试,但大致能推测出原因:第一种情况是因为页面中本身就有div,elmGetter.get几乎是 ...

    谢谢老师解答

    第二种 改成 script.onload = e => e.isTrusted && resolve(e); 等不到返回值了

    这个页面 Vue.version = '2.7.10'

    目前我猜还是和 MutationObserver 有关系,因为页面启动后30秒直接loadScript是成功的
    回复
    订阅

    使用道具 举报

  • TA的每日心情
    开心
    前天 13:37
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4196

    回帖

    4061

    积分

    管理员

    积分
    4061

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2023-6-5 10:25:00 | 显示全部楼层

    排查到了,是GM_log(div);因为GM_log只能打印基础类型,div就出问题报错了
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-30 00:00
  • 签到天数: 122 天

    [LV.7]常住居民III

    29

    主题

    601

    回帖

    542

    积分

    专家

    积分
    542

    油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-6-5 11:34:14 | 显示全部楼层
    王一之 发表于 2023-6-5 10:25
    排查到了,是GM_log(div);因为GM_log只能打印基础类型,div就出问题报错了

    哦哈,看我一下就发现两个问题,但这都是小问题避开即可
    MutationObserver 到底和页面啥啥有私仇还是旧恨具体原因找起来怕是很难,暂且搁置
    谢谢老师们
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-30 00:00
  • 签到天数: 122 天

    [LV.7]常住居民III

    29

    主题

    601

    回帖

    542

    积分

    专家

    积分
    542

    油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-6-5 19:59:32 | 显示全部楼层
    本帖最后由 脚本体验师001 于 2023-6-5 20:00 编辑
    cxxjackie 发表于 2023-6-4 22:43
    我没这个云盘账号来测试,但大致能推测出原因:第一种情况是因为页面中本身就有div,elmGetter.get几乎是 ...

    这简直罪过,怎么可以对 MutationObserver 产生哪怕一丝丝的怀疑,简直就是对神灵的亵渎

    MutationObserver 牌子硬,站的稳,又帅,免检值得信赖

    我发现使用Object.defineProperty对vue数据进行监听,同样会出现这个问题
    回复

    使用道具 举报

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

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

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

    发表于 2023-6-5 22:19:55 | 显示全部楼层

    脚本体验师001 发表于 2023-6-5 00:05

    谢谢老师解答

    第二种 改成 script.onload = e => e.isTrusted && resolve(e); 等不到返回值了

    调试了一下,简单来说就是,页面在某一时刻将appendChild劫持了,并在处理结束后将其还原:
    11.png
    当检测到插入的标签是link、style或script时触发一个伪造的load事件,阻止其创建并在#__qiankun_microapp_wrapper_for_micro_home_main__这个元素下生成了一条记录。
    解决方法可以改用append来插入,或者调用appendChild的原始引用:

    Node.prototype.appendChild.call(document.head, script);
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-30 00:00
  • 签到天数: 122 天

    [LV.7]常住居民III

    29

    主题

    601

    回帖

    542

    积分

    专家

    积分
    542

    油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-6-5 22:54:19 | 显示全部楼层
    cxxjackie 发表于 2023-6-5 22:19
    [md]调试了一下,简单来说就是,页面在某一时刻将appendChild劫持了,并在处理结束后将其还原:
    ![11.png ...

    就这么轻而易举的就找到原因了!
    俺真是五体投地全身心的佩服
    用我夸人的最华丽的辞藻来说,老师好棒棒!!!!!!
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    2

    回帖

    6

    积分

    助理工程师

    积分
    6
    发表于 2023-9-9 14:01:14 | 显示全部楼层
    @李恒道 @cxxjackie 两位大佬,请问外部库可以改成本地路径吗?例如 // @require C:/JScript/ElementGetter.js 万分感谢
    回复

    使用道具 举报

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

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

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

    发表于 2023-9-9 22:57:44 | 显示全部楼层
    mihaty 发表于 2023-9-9 14:01
    @李恒道 @cxxjackie 两位大佬,请问外部库可以改成本地路径吗?例如 // @require C:/JScript/ElementGetter ...

    可以,这样写就行:
    1. // @require file:///C:/JScript/ElementGetter.js
    复制代码

    油猴需要改一下设置:安全 -> 允许脚本访问本地文件(所有或者外部)
    浏览器可能还需要额外设置一下,允许插件访问文件网址,这个不同浏览器的设置方式不同,一般是默认开启的。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5966

    回帖

    6763

    积分

    管理员

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

    积分
    6763

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

    发表于 2023-9-10 02:03:21 | 显示全部楼层
    mihaty 发表于 2023-9-9 14:01
    @李恒道 @cxxjackie 两位大佬,请问外部库可以改成本地路径吗?例如 // @require C:/JScript/ElementGetter ...

    https://bbs.tampermonkey.net.cn/ ... thread&tid=1550
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

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

    使用道具 举报

  • TA的每日心情
    开心
    2024-9-29 15:06
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    9

    主题

    81

    回帖

    88

    积分

    初级工程师

    积分
    88
    发表于 2023-11-1 18:12:58 | 显示全部楼层
    const elmGetter = new ElementGetter();    一加载这个语句,网页有些内容就不正常了。有什么办法解决么?
    回复

    使用道具 举报

    发表回复

    本版积分规则

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