Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GM_addElement 在某些情况下会返回 undefined #334

Open
Xia0xia0Xia0 opened this issue Dec 27, 2024 · 5 comments
Open

GM_addElement 在某些情况下会返回 undefined #334

Xia0xia0Xia0 opened this issue Dec 27, 2024 · 5 comments
Labels
兼容问题 其它管理器可以运行,脚本猫不能运行

Comments

@Xia0xia0Xia0
Copy link

GM_addElement() 方法在某些情况下会返回 undefined,这应该是一个非常隐蔽的Bug,我一直没有找到真正触发它的原因。

表现为:元素已经成功插入,但返回值为undefined.

@CodFrm
Copy link
Member

CodFrm commented Dec 27, 2024

有可复现的例子么?

@Xia0xia0Xia0
Copy link
Author

问题复现方法:

  1. 安装字体渲染脚本,然后打开 www.baidu.com ,在“高级核心功能设置”中打开字体比例缩放功能保存,然后在进入“字体渲染设置”界面,设置字体缩放为1.3(任意不等于1的值),保存数据。

  2. 再新建一个新脚本,内容如下:

// ==UserScript==
// @name         New Userscript
// @namespace    https://bbs.tampermonkey.net.cn/
// @version      0.1.0
// @description  try to take over the world!
// @author       You
// @match        *://*/*
// @grant        GM_addElement
// ==/UserScript==

(function() {
    'use strict';
    setTimeout(()=>console.log(GM_addElement("div")), 1000);
})();
  1. 刷新页面,1秒后控制台打印返回undefined,而非生成的元素。

此问题仅发生在ScriptCat上,其他脚本管理器TM,VM均正常。

问题的触发点

我从十多个脚本中逐一排查出是 Reflect.defineProperty(MouseEvent.prototype, "clientX", value) 相关的功能造成的问题。产生冲突的脚本是字体渲染脚本中关于鼠标坐标修正的一段代码, https://github.com/F9y4ng/GreasyFork-Scripts/blob/fe4bac97e2b63bd679d98ed8e715e2504fe65d25/Font%20Rendering.user.js#L1230

{ objs: [MouseEvent.prototype], props: ["clientX", "clientY", "pageX", "pageY", "layerX", "layerY", "offsetX", "offsetY", "screenX", "screenY", "x", "y"] }

只要将这一行注释,或者将其中的"clientX", "clientY", 删除,问题就消失了,一切恢复正常。

疑问是 ScriptCat 的 GM_addElement() 方法为什么会与 MouseEvent.prototypeclientX, clientY 这两个属性产生关系?这两者之间有什么瓜葛?

@CodFrm
Copy link
Member

CodFrm commented Dec 27, 2024

@CodFrm CodFrm added the 兼容问题 其它管理器可以运行,脚本猫不能运行 label Dec 27, 2024
@Xia0xia0Xia0
Copy link
Author

https://github.com/scriptscat/scriptcat/blob/main/src/app/message/content.ts#L41C40-L41C47

https://github.com/scriptscat/scriptcat/blob/main/src/app/message/content.ts#L116

因为ScriptCat是使用clientX来传递这个元素的,应该是和这冲突了

为什么要用MouseEvent的clientX属性来传递元素?还专门挑选一个最常用的属性。换成movementX不好么?

@CodFrm
Copy link
Member

CodFrm commented Dec 27, 2024

@Xia0xia0Xia0 确实换一个不常用的属性更好,当时没考虑到这个

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
兼容问题 其它管理器可以运行,脚本猫不能运行
Projects
None yet
Development

No branches or pull requests

3 participants
@CodFrm @Xia0xia0Xia0 and others