Closed Long0x0 closed 9 months ago
具体原因不清楚,把iframe页面加入禁用翻译黑名单
即可简单解决:
https://notebooks.githubusercontent.com/view/ipynb*
加入禁用确实正常了,但是就不能翻译了。 immersive translate没有这个问题,不过也不开源,不知道是怎么实现的。 目前写了一个油猴脚本强行patch:
// ==UserScript==
// @name github .ipynb preview patch
// @version 0.0.1
// @description fix github .ipynb preview bug
// @license MIT
// @match https://github.com/*.ipynb
// @run-at document-start
// @grant none
// ==/UserScript==
const __addEventListener = window.addEventListener;
window.addEventListener = function(type, listener, options) {
if(type === "message" && listener.toString().includes(`("ERROR")`)) {
const __listener = listener;
listener = function(event) {
if(event.data?.action === "trans_getrule") {
console.log('ignore', event.data);
} else {
__listener(event);
}
}
}
__addEventListener(type, listener, options);
}
1、这个很可能是github代码的问题,类似这个 issue: https://github.com/fishjar/kiss-translator/issues/50#issuecomment-1825126129
2、在iframe中发送消息给parent会触发问题,接受消息则没有问题,所以应该可以修复一下,ifame中只单向接受消息即可。
3、关于iframe页面,其实之前就有个纠结的问题,即iframe中的规则要不要和parent的规则共用。
是否翻译
的状态混乱。之前的做法是选择共用,所以iframe需要从parent获取规则信息。通过修复这个bug,顺便改变一下这个规则,即iframe和parent规则分开定义,状态混淆的问题可以设置一致的初始状态即可避免。
下个版本将修复,需要添加iframe页面的规则:
效果如下:
1、这个很可能是github代码的问题,类似这个 issue: #50 (comment)
2、在iframe中发送消息给parent会触发问题,接受消息则没有问题,所以应该可以修复一下,ifame中只单向接受消息即可。
3、关于iframe页面,其实之前就有个纠结的问题,即iframe中的规则要不要和parent的规则共用。
- 如果规则不共用,但快捷键等操作肯定要共用,则可能会造成
是否翻译
的状态混乱。- 如果共用的话也不太合理,ifame和parent页面元素结构完全不同,规则大相径庭。
之前的做法是选择共用,所以iframe需要从parent获取规则信息。通过修复这个bug,顺便改变一下这个规则,即iframe和parent规则分开定义,状态混淆的问题可以设置一致的初始状态即可避免。
规则分开定义还有个好处,即使单独打开irame页面的链接,也将按照规则定义翻译。 比如 打开页面
嗯,还是分开定义更合理一些。
另外选择器能不能支持引用全局选择器呢,类似于#notebook-container :is(GLOBAL_SELECTOR)
,这样自定义规则就不用再写一遍。
另外选择器能不能支持引用全局选择器呢,类似于
#notebook-container :is(GLOBAL_SELECTOR)
,这样自定义规则就不用再写一遍。
需要时到全局规则或订阅规则复制一份即可,不算太麻烦。
而且如果这样的话,还需要一个能编辑 GLOBAL_SELECTOR
定义的地方,暂时还是不增加这个特性吧。
扩展和页面的通信,影响了页面和iframe的通信。很多翻译扩展都会有这个问题。 https://github.com/crimx/ext-saladict/issues/2093 https://github.com/orgs/community/discussions/64876
测试页面
或许可以用
runtime.connect
替换sendMessage
。