scriptcat icon indicating copy to clipboard operation
scriptcat copied to clipboard

插件启用后于 b 站评论区选中文本困难

Open Y0ungSea opened this issue 9 months ago • 7 comments

操作系统:Windows 11 浏览器:ZenBrowser 1.8.2b (基于 Firefox 135.0.1) (64 位) ScriptCat:0.16.6

问题描述: 在浏览器中启用 ScriptCat 插件后,在哔哩哔哩视频网中选中文本时,发现选中困难。 我最初认为是我安装的脚本导致的。但即使关闭加载脚本,依然出现该情况。

我录制了 Gif 来说明情况。正常情况如下:

Image

然后这个是开启插件后的行为(拖动选中时我并未抬起鼠标):

Image

另外,经测试,Tampermonkey 并不会出现这个情况。望修复。

Y0ungSea avatar Feb 28 '25 11:02 Y0ungSea

Edge好像没遇到这个问题,是只有ZenBrowser有这个问题么?另外尝试关闭这个开关可以复现么?

Image

CodFrm avatar Mar 01 '25 07:03 CodFrm

Edge好像没遇到这个问题,是只有ZenBrowser有这个问题么?另外尝试关闭这个开关可以复现么?

Image

我测试时已经关闭了这个开关,所以是的,关闭开关后问题依然存在。 唯一能使其消失的方法是:在插件管理器页面中卸载或禁用插件。

还发现 Firefox 原版(我使用 winget 安装最新 Firefox)也有这个情况,似乎可以认为是 Firefox 系浏览器的通病。

Y0ungSea avatar Mar 01 '25 08:03 Y0ungSea

@CodFrm 定位到问题了吗

Y0ungSea avatar Mar 04 '25 09:03 Y0ungSea

使用Firefox 125版本没有出现,使用Firefox 136确实复现了上述问题,还没定位到

Firefox 139.0.4依旧存在

CodFrm avatar Mar 06 '25 06:03 CodFrm

经过本编程菜鸟的实践,发现一个临时的解决方法,极大改善情况,提供给同样遇到问题的人。

在你的 userContent.css 加入以下代码:

/* 修复 ScriptCat 启用时于 b 站评论区选中文本异常 */
@-moz-document domain("bilibili.com") {
  bili-rich-text {
    /* 该项原本值为 inline */
    --bili-rich-text-display: block !important;
  }
}

@CodFrm 这个起修复作用的css覆写了"bili-rich-text"元素的变量"--bili-rich-text-display",变量原本值为"inline",这是否对定位问题有所帮助?

Y0ungSea avatar Mar 06 '25 07:03 Y0ungSea

Windows1124H2+Firefox136(64bit)下使用@Y0ungSea

经过本编程菜鸟的实践,发现一个临时的解决方法,极大改善情况,提供给同样遇到问题的人。

方法不管用(( 已确认userContent.css生效

Hwenray avatar Mar 14 '25 14:03 Hwenray

我也遇到了这种情况,要是不看这个issue的话,我以为是b站的问题。。。

ViCrack avatar Apr 02 '25 06:04 ViCrack

@CodFrm 感覺是 webpack 有問題。

試過改代碼但無效。

把打包後content.js裡的"./src/content.ts"

eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _app_logger_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./app/logger/core */ \"./src/app/logger/core.ts\");\n/* harmony import */ var _app_logger_message_writer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./app/logger/message_writer */ \"./src/app/logger/message_writer.ts\");\n/* harmony import */ var _app_message_content__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./app/message/content */ \"./src/app/message/content.ts\");\n/* harmony import */ var _app_message_internal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./app/message/internal */ \"./src/app/message/internal.ts\");\n/* harmony import */ var _runtime_content_content__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./runtime/content/content */ \"./src/runtime/content/content.ts\");\n/* harmony import */ var _dist_inject_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dist/inject.js */ \"./dist/inject.js\");\n/* harmony import */ var _pkg_utils_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./pkg/utils/utils */ \"./src/pkg/utils/utils.ts\");\n\n\n\n\n\n// @ts-ignore\n\n\nconst D392EC6BF3123287 = () => {\n  const internalMessage = new _app_message_internal__WEBPACK_IMPORTED_MODULE_3__[\"default\"](\"content\");\n  const logger = new _app_logger_core__WEBPACK_IMPORTED_MODULE_0__[\"default\"]({\n    debug: \"development\" === \"development\",\n    writer: new _app_logger_message_writer__WEBPACK_IMPORTED_MODULE_1__[\"default\"](internalMessage),\n    labels: {\n      env: \"content\",\n      href: window.location.href\n    }\n  });\n  const scriptFlag = (0,_pkg_utils_utils__WEBPACK_IMPORTED_MODULE_6__.randomString)(8);\n\n  // 注入运行框架\n  const temp = document.createElementNS(\"http://www.w3.org/1999/xhtml\", \"script\");\n  temp.setAttribute(\"type\", \"text/javascript\");\n  temp.textContent = \"(function (ScriptFlag) {\\n\".concat(_dist_inject_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"], \"\\n})('\").concat(scriptFlag, \"')\");\n  temp.className = \"injected-js\";\n  document.documentElement.appendChild(temp);\n  temp.remove();\n  internalMessage.syncSend(\"pageLoad\", null).then(resp => {\n    logger.logger().debug(\"content start\");\n    // 通过flag与inject建立通讯\n    const contentMessage = new _app_message_content__WEBPACK_IMPORTED_MODULE_2__[\"default\"](scriptFlag, true);\n    new _runtime_content_content__WEBPACK_IMPORTED_MODULE_4__[\"default\"](contentMessage, internalMessage).start(resp);\n  });\n};\nD392EC6BF3123287();\n\n//# sourceURL=webpack://scriptcat/./src/content.ts?");

換成

eval(`__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _app_logger_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./app/logger/core */ "./src/app/logger/core.ts");
/* harmony import */ var _app_logger_message_writer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./app/logger/message_writer */ "./src/app/logger/message_writer.ts");
/* harmony import */ var _app_message_content__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./app/message/content */ "./src/app/message/content.ts");
/* harmony import */ var _app_message_internal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./app/message/internal */ "./src/app/message/internal.ts");
/* harmony import */ var _runtime_content_content__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./runtime/content/content */ "./src/runtime/content/content.ts");
/* harmony import */ var _dist_inject_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dist/inject.js */ "./dist/inject.js");
/* harmony import */ var _pkg_utils_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./pkg/utils/utils */ "./src/pkg/utils/utils.ts");





// @ts-ignore


const D392EC6BF3123287 = () => {
  const internalMessage = new _app_message_internal__WEBPACK_IMPORTED_MODULE_3__["default"]("content");
  const logger = new _app_logger_core__WEBPACK_IMPORTED_MODULE_0__["default"]({
    debug: "development" === "development",
    writer: new _app_logger_message_writer__WEBPACK_IMPORTED_MODULE_1__["default"](internalMessage),
    labels: {
      env: "content",
      href: window.location.href
    }
  });
  const scriptFlag = (0,_pkg_utils_utils__WEBPACK_IMPORTED_MODULE_6__.randomString)(8);

  // 注入运行框架
  const temp = document.createElementNS("http://www.w3.org/1999/xhtml", "script");
  temp.setAttribute("type", "text/javascript");
  temp.textContent = "(function (ScriptFlag) {\n".concat(_dist_inject_js__WEBPACK_IMPORTED_MODULE_5__["default"], "\n})('").concat(scriptFlag, "')");
  temp.className = "injected-js";
  document.documentElement.appendChild(temp);
  temp.remove();
  internalMessage.syncSend("pageLoad", null).then(resp => {
    logger.logger().debug("content start");
    // 通过flag与inject建立通讯
    const contentMessage = new _app_message_content__WEBPACK_IMPORTED_MODULE_2__["default"](scriptFlag, true);
    new _runtime_content_content__WEBPACK_IMPORTED_MODULE_4__["default"](contentMessage, internalMessage).start(resp);
  });
};
D392EC6BF3123287();

//# sourceURL=webpack://scriptcat/./src/content.ts?`);

就解決了。

也就是說MV2 (0.16.6) 要跟MV3一樣換打包工具吧 rspack或者 vite 應該都行。不會打包出來一堆eval

cyfung1031 avatar Jul 05 '25 08:07 cyfung1031

@cyfung1031 这是怎么更换的

CodFrm avatar Jul 05 '25 08:07 CodFrm

@cyfung1031 这是怎么更换的

上面我看錯了。 MV2版本有沒有開發代碼版?build出來都壓縮了無法debug 現在只能肯定是content.js裡插代碼那一塊 (injectJs)


這個反白問題 v0.9.4 沒事 v0.10.0 問題出現

cyfung1031 avatar Jul 05 '25 12:07 cyfung1031

@cyfung1031 MV2的代码在这个分支:release/mv2

在v0.10.0的时候对注入方式进行了大改动,所以可能产生了这个问题

CodFrm avatar Jul 05 '25 14:07 CodFrm

修正版下载:

https://github.com/cyfung1031/scriptcat/actions/runs/16096691763

all-artifacts 裡面的 scriptcat-v0.16.6-firefox.zip


测试版好像要 about:debugging#/runtime/this-firefox 才能安装

cyfung1031 avatar Jul 06 '25 07:07 cyfung1031

@cyfung1031 MV2的代码在这个分支:release/mv2

在v0.10.0的时候对注入方式进行了大改动,所以可能产生了这个问题

PR 501 提交了。

MV3還有這堆垃圾。不知道是從哪來的。

個人意見,應該減少 injectJs 裡面的東西。 那些東西(包括這些打包垃圾代碼)會全部頁面跑. 不太好

MV2就算了吧。請改走MV3 injectJs裡面的垃圾代碼。應該不需要一萬條代碼在每個頁面注入。 @CodFrm

下圖是MV3

Image

cyfung1031 avatar Jul 06 '25 07:07 cyfung1031

@cyfung1031 我使用这个修复版本,似乎还是存在这个问题

CodFrm avatar Jul 06 '25 12:07 CodFrm

@cyfung1031 我使用这个修复版本,似乎还是存在这个问题

不清楚是不是macOS 跟windows的差異

我用macOS. Firefox 140.0.2 (aarch64)

下戴這個 all-artifacts

https://github.com/scriptscat/scriptcat/actions/runs/16099297243

解壓縮後,找裡面的 scriptcat-v0.16.7-firefox.zip

打開 about:debugging#/runtime/this-firefox 讀這個zip 檔安裝

腳本都能運行

https://github.com/user-attachments/assets/7a705490-40de-4c0c-981f-e0e7e8c75bba

cyfung1031 avatar Jul 06 '25 13:07 cyfung1031

@cyfung1031 我也是mac firefox 140.0.2,奇怪了

https://github.com/user-attachments/assets/12687736-db8c-4f23-add9-300d9bed3ea2

CodFrm avatar Jul 06 '25 14:07 CodFrm

@cyfung1031 我也是mac firefox 140.0.2,奇怪了

iShot_2025-07-06_22.17.15.mp4

看起來是"正常"呀 Bilibili 本身就是這樣 你把滑鼠移到文字上有反白就可以了 移離文字沒反白是正常

1樓第二張圖那個,是滑鼠移動後,反白會斷開,移回去也不會有文字反白

cyfung1031 avatar Jul 06 '25 14:07 cyfung1031

@cyfung1031 没有安装ScriptCat扩展的话,是不会有这个问题,我也不知道怎么导致的,很奇怪

CodFrm avatar Jul 07 '25 08:07 CodFrm

看起來是"正常"呀 Bilibili 本身就是這樣 你把滑鼠移到文字上有反白就可以了 移離文字沒反白是正常

正常来说是不会有视频那样的反白会不断闪烁切换状态的情况的,而是平滑的选中一段文字(就像是在一些文本编辑器里面的选中效果)

Hwenray avatar Jul 14 '25 13:07 Hwenray

看起来是"正常"呀 Bilibili 本身就是这样 你把滑鼠移到文字上有反白就可以了 移离文字没反白是正常

正常来说是不会有视频那样的反白会不断闪烁切换状态的情况的,而是平滑的选中一段文字(就像是在一些文本编辑器里面的选中效果)

https://addons.mozilla.org/zh-cn/android/addon/scriptcat-pre/

安装这个。


你会得到以下结果就是 "正常" 这是B站不相容Firefox的问题

Image

cyfung1031 avatar Jul 15 '25 08:07 cyfung1031

~~@cyfung1031 你可以尝试卸载脚本猫扩展,进行这个操作时是正常的~~

~~我记得当时是确认过卸载扩展就正常了,好奇怪~~

现在的版本没有这个问题了

CodFrm avatar Jul 15 '25 08:07 CodFrm

~~@cyfung1031 @Hwenray 我刚刚在Firefox上,卸载了扩展(并尝试没有安装任何扩展),依旧存在这个问题,好像确实不是本扩展影响的~~

不好意思,我又看了原题,我理解错了,现在的版本(>v0.16.6,还在审核中,甚至给我拒绝了)没有这个问题了

CodFrm avatar Jul 15 '25 09:07 CodFrm

补充一下。之前写了不知在哪裡。

这个 #352 的问题很复杂。

  1. B站本身与Firefox有相容问题。所以你会看到楼主第一张GIF也是怪怪的
  2. 然后是安装了旧版ScriptCat,会发生更奇怪的现象。

对於那个另更怪的现象,我好像花了不止一天的时间。虽然深入的因果关係我解释不了,但结果论是,

B站是非UTF-8,SC注入代码是UTF-8带非ASCII非中文字

v0.10.0 的升级时加了一堆东西。 其中一个dayjs 或是cron 的包裡面包含了一些非ASCII非中文的字 (多国语言时间日期用),还有非打印的字元符。 B站是简体中文编码,不是UTF-8 ScriptCat注入代码是UTF-8 以往没有指定UTF-8编码 所以注入代码后影响了页面。

#501 提交了解决方案。 之后也再做了一些TreeShaking,尽量把问题代码抽走

现在是第一张GIF的行为 这样的话你的ScriptCat是没问题的。是Firefox的问题

上面链结的 beta 版已经是处理好这个问题的版本 虽然名字是Beta,但实际内容是穏定版

cyfung1031 avatar Jul 15 '25 11:07 cyfung1031