李恒道
发表于 2021-10-7 15:23:27
cxxjackie 发表于 2021-10-7 15:16
console.log(document)就可以触发,我debugger跟了一下油猴的代码,他在读取document的时候会执行一些自 ...
我刚才就是用这种方式测试的
并没有复现
邪门....
![图片.png](data/attachment/forum/202110/07/152402du23ejjgeukieti1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "图片.png")
cxxjackie
发表于 2021-10-7 15:46:35
李恒道 发表于 2021-10-7 15:23
我刚才就是用这种方式测试的
并没有复现
@grantunsafeWindow
大概弄清这个问题了,腾讯文档这个页面本身会对addEventListener进行劫持,用了一种事件委托的机制,将所有事件都委托给public-common这个文件中的一个函数来处理,而油猴在沙盒环境中会在读取document时特殊处理,也劫持addEventListener并将unsafeWindow替换为window,这无意中破坏了原有的事件委托,结果把真实的事件给暴露出来了。。。这还真是,有趣的特性。这篇文章有点不太好改了,姑且将错就错吧哈哈。
李恒道
发表于 2021-10-7 16:10:40
cxxjackie 发表于 2021-10-7 15:46
@grantunsafeWindow
大概弄清这个问题了,腾讯文档这个页面本身会对addEventListener进行劫持,用了一 ...
加了沙盒模式之后复现成功了
劫持addEventListener并将unsafeWindow替换为window
这句话是什么意思
我理解的是
油猴在读取document的时候还原了页面的addEventListener函数是么?
好神奇啊...
我还是第一次碰到这种情况
哥哥也一手FBI Warning
哈哈哈哈哈哈
王一之
发表于 2021-10-7 16:21:42
cxxjackie 发表于 2021-10-7 15:46
@grantunsafeWindow
大概弄清这个问题了,腾讯文档这个页面本身会对addEventListener进行劫持,用了一 ...
不知道tm是怎么处理的,ScriptCat的沙盒会记录最开始的addEventListener(也就是还没被腾讯文档劫持时候的addEventListener),然后如果你在沙盒中使用addEventListener,就是最原始的addEventListener。
cxxjackie
发表于 2021-10-7 16:27:09
李恒道 发表于 2021-10-7 16:10
加了沙盒模式之后复现成功了
劫持addEventListener并将unsafeWindow替换为window
这句话是什么意思
就是他保存了window(油猴自己的)和unsafeWindow(页面原有的)的引用,然后将事件中本应指向unsafeWindow的改为指向window,起到一个保护效果,这个逻辑在页面加载后执行没有问题,但是document-start过早执行就造成了这种奇怪现象。
cxxjackie
发表于 2021-10-7 16:35:43
王一之 发表于 2021-10-7 16:21
不知道tm是怎么处理的,ScriptCat的沙盒会记录最开始的addEventListener(也就是还没被腾讯文档劫持时候 ...
脚本猫试了一下,没有复现,tm这些稀奇古怪的操作真是神奇。
李恒道
发表于 2021-10-7 16:39:32
cxxjackie 发表于 2021-10-7 16:27
就是他保存了window(油猴自己的)和unsafeWindow(页面原有的)的引用,然后将事件中本应指向unsafeWind ...
还是不太理解这种操作。
想不通为什么要这样做
等以后有机会再看看吧...
感觉像是一个有用的bug?
cxxjackie
发表于 2021-10-7 16:46:40
李恒道 发表于 2021-10-7 16:39
还是不太理解这种操作。
想不通为什么要这样做
等以后有机会再看看吧...
我也不太理解,他的代码混淆严重我读的很费劲。这也不能算有用吧,只是在特定情况下打开了潘多拉的魔盒,但是在其他情况下也可能造成错误,还是尽量不要在document-start、document-body这些阶段读取document比较好。
李恒道
发表于 2021-10-7 16:54:11
cxxjackie 发表于 2021-10-7 16:46
我也不太理解,他的代码混淆严重我读的很费劲。这也不能算有用吧,只是在特定情况下打开了潘多拉的魔盒, ...
哥哥要不反馈tampermonkey作者玩玩
太硬了
两节课不到干出来个tampermonkey隐藏特性
哈哈哈
cxxjackie
发表于 2021-10-7 17:00:41
李恒道 发表于 2021-10-7 16:54
哥哥要不反馈tampermonkey作者玩玩
太硬了
两节课不到干出来个tampermonkey隐藏特性
我没有github账号啊,刚好搜到这个issue:
https://github.com/Tampermonkey/tampermonkey/issues/290
我甚至怀疑他是为了解决问题制造出了更多问题哈哈哈。