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

[油猴脚本开发指南]油猴的本质以及document的处理(三)

[复制链接]
  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    637

    主题

    5194

    回帖

    6076

    积分

    管理员

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

    积分
    6076

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

    发表于 2022-6-10 23:30:01 | 显示全部楼层 | 阅读模式

    M函数

    我们继续研究M函数

    t || (t = he({
    instance: n,
    is_open: !1
    }),
    b(["write", "writeln", "open", "close"], o=>{
    t[o] = n[o],
    n[o] = function() {
        let r = !1;
        -1 != O(["write", "writeln", "open"], o) ? t.is_open ? r = !0 : t.is_open = !0 : "close" === o && (t.is_open = !1),
        !r && t.is_open && ve.send("document.write");
        const s = Ee.documentElement
          , a = _(t[o], n, arguments);
        if (!r && t.is_open)
            return s !== Ee.documentElement && (t.instance !== n && (t = null,
            M(Ee)),
            b(e.write_listeners, e=>{
                e(Ee)
            }
            )),
            a
    }
    }
    ))

    首先慢慢看,查看是否有t
    没有则合并出来一个t,he是合并对象函数,n是document,is_opne为固定属性false
    可知t是一个对象

    t || (t = he({
        instance: n,
        is_open: !1
    })

    图片.png
    然后往下看
    图片.png
    可以看到t大概是一个forEach函数
    对write writeln等函数进行处理
    n是document,而t是合并对象
    首先我们把document的函数赋值给对应的t对象上
    图片.png
    然后将document函数上的对应属性进行劫持
    图片.png
    进行一定的处理
    因为我们这次目标主要是document,所以就不分析这部分代码了
    大概了解M函数的作用即可

    M函数作用

    对"write", "writeln", "open", "close"四个属性进行劫持处理

    结语

    太长
    继续撒花~

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

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

    发表回复

    本版积分规则

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