关于部分用户不显示控制面板的原因及解决方法 #453
Replies: 6 comments 7 replies
-
@ADJazzzz 哥们有空来看下不 |
Beta Was this translation helpful? Give feedback.
-
我试着在你所说的那里打断点, |
Beta Was this translation helpful? Give feedback.
-
今天写的一段测试代码: // ==UserScript==
// @name test document-start
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://live.bilibili.com/22474988
// @grant none
// @run-at document-start
// ==/UserScript==
(function() {
console.log('document.head',document.head.children,window.BilibiliLive)
})(); 此时head不为空,但是 |
Beta Was this translation helpful? Give feedback.
-
找到了一种很直接的解决方案, const isTargetFrame = (): boolean => {
if (unsafeWindow.document.head.innerHTML.includes('BilibiliLive')) {
return true
} else {
return false
}
} |
Beta Was this translation helpful? Give feedback.
-
这个问题还没有解决。最近又和一些用户交流了一下,不显示控制面板还是因为脚本被注入得太早,具体来说有两个原因:
|
Beta Was this translation helpful? Give feedback.
-
还有一个发现就是,violentmonkey是支持 |
Beta Was this translation helpful? Give feedback.
-
目前一部分用户在QQ频道反馈没有控制面板,根据我这段时间和其中一位用户的交流,我发现问题似乎出在这里:
BLTH/src/main.ts
Line 16 in dc323cc
因为之前有个版本,这行代码之前有一行日志输出
logger.log('document.readyState', document.readyState)
,我能在他的控制台截图里找到这条且document.readyState
为loading
,后面就没有任何日志了。后来我把这行日志输出放到了下面,该用户就一条BLTH日志输出都没有了。isTargetFrame
函数根据window.BilibiliLive
来判断当前是否是目前frame。window.BilibiliLive
的定义写在document.head
里的一个script代码块里,且是最初就存在于html里的。所以我推断:由于脚本被注入得太早,
window.BilibiliLive
还不存在,那时候document.head
都没出现。目前脚本的@run-at
是document-start
,我查阅了Tampermonkey和Violentmonkey对document-start
的解释,确实也没说那时候document.head
就一定存在了。我看了下Blibili-Evolved的代码,有一段等待
document.head
出现的代码:https://github.com/the1812/Bilibili-Evolved/blob/c14a2332244f88f8c749305b7279601f21833456/src/client/init.ts#L26-L29
我在想是不是BLTH是不是也应该这么做。欢迎各位大佬来讨论原因和解决方法。
Beta Was this translation helpful? Give feedback.
All reactions