diff --git a/CHANGELOG.md b/CHANGELOG.md
index ddd4418d..adf1a650 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,9 @@
## 2.2.3
-- 优化:panel显示方式,同一页面内再次打开panel记录上次位置
+- 修复:版权视频播放页规则丢失bug,移除补丁
+- 优化:CSS注入位置改为html tag内,提升性能和稳定性
+- 优化:panel显示方式,同一页面内再次打开panel保留上次出现位置和滚动位置
## 2.2.2
diff --git a/README.md b/README.md
index a4a6a420..78c32c28 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
-
+
bilibili 页面净化大师
高度定制化的 bilibili 网页净化插件,提供 300+ 个功能开关,深度净化页面元素
@@ -64,7 +64,8 @@
- 给 UP 主充电时,若出现 **充电窗口载入失败 (报错NaN)**,请关闭 **通用项「URL参数净化」** 功能,刷新页面再充电
- **「版权视频播放页」大部分功能与「播放页」一致且互相同步,小部分独有功能已用 "★" 重点标出**
-- **已知Bug:** 在打开「版权作品播放页」时,小概率出现顶栏未净化的情况。已通过打补丁的方式暂时补救,副作用为打开页面数秒后顶栏净化规则才生效
+- 「动态页」评论区相关功能与「播放页」一致且互相同步
+- 「直播页」顶栏与普通顶栏不同,通用功能对其不生效(仅搜索栏少数功能与通用同步)
## 浏览器适配
diff --git a/src/core/group.ts b/src/core/group.ts
index 9bfc13c5..0a0c5437 100644
--- a/src/core/group.ts
+++ b/src/core/group.ts
@@ -84,7 +84,7 @@ export class Group implements IGroup {
e.reloadItem()
}
})
- debug(`reloadGroup ${this.groupID} OK`)
+ // debug(`reloadGroup ${this.groupID} OK`)
} catch (err) {
error(`reloadGroup ${this.groupID} err`)
error(err)
diff --git a/src/core/item.ts b/src/core/item.ts
index 81c4b8fa..12e2a9f9 100644
--- a/src/core/item.ts
+++ b/src/core/item.ts
@@ -80,19 +80,18 @@ export class NormalItem implements IItem {
return
}
try {
- if (document.querySelector(`head style[bili-cleaner-css=${this.itemID}]`)) {
+ if (document.querySelector(`html>style[bili-cleaner-css=${this.itemID}]`)) {
debug(`insertItemCSS ${this.itemID} CSS exist, ignore`)
return
}
const style = document.createElement('style')
- // 若使用innerText, 多行CSS插入head后会产生
标签
- // 简单压缩
+ // 简单压缩, 若使用innerText, 多行CSS插入head后会产生
标签
style.innerHTML = this.itemCSS.replace(/\n\s*/g, '').trim()
// 指定CSS片段ID,用于实时启用停用
style.setAttribute('bili-cleaner-css', this.itemID)
-
- // chrome系浏览器上可能出现style插入成功, 但DOMContentLoaded后规则丢失, 通过后续监听load事件打补丁解决
- document.head.appendChild(style)
+ // 放弃在head内插入style
+ // 改为在html内插入style标签(与head/body同级), 避免版权视频播放页head内规则丢失bug
+ document.documentElement.appendChild(style)
debug(`insertItemCSS ${this.itemID} OK`)
} catch (err) {
error(`insertItemCSS ${this.itemID} failed`)
@@ -102,7 +101,7 @@ export class NormalItem implements IItem {
/** 停用CSS片段, 从document.head移除style */
removeItemCSS() {
if (this.itemCSS) {
- const style = document.querySelector(`head style[bili-cleaner-css=${this.itemID}]`) as HTMLStyleElement
+ const style = document.querySelector(`html>style[bili-cleaner-css=${this.itemID}]`) as HTMLStyleElement
if (style) {
style.parentNode?.removeChild(style)
debug(`removeItemCSS ${this.itemID} OK`)
diff --git a/src/core/panel.ts b/src/core/panel.ts
index 65293379..17d8bc46 100644
--- a/src/core/panel.ts
+++ b/src/core/panel.ts
@@ -185,7 +185,6 @@ export class Panel implements IPanel {
return
}
const html = document.createElement('div')
- html.setAttribute('id', 'bili-cleaner')
html.innerHTML = this.panelHTML
document.body.appendChild(html)
debug('insertPanelHTML OK')
diff --git a/src/init.ts b/src/init.ts
index 267a395f..eaf325af 100644
--- a/src/init.ts
+++ b/src/init.ts
@@ -2,31 +2,22 @@ import { log } from './utils/logger'
/**
* 初始化项目
- * 等待document.head出现+渲染, 用于插入节点
- * pnpm run dev调试时,可能出现由于vite-plugin-monkey抢先监听document.head
- * 导致init无法完成, 脚本载入失败或载入缓慢的情况, 刷新无效可先build再调试
+ * 等待出现+渲染, 用于插入节点
+ * pnpm run dev调试时,可能出现由于vite-plugin-monkey抢先监听document
+ * 导致脚本载入失败或载入缓慢的情况, 若刷新无效可先build再调试
*/
export const init = async () => {
- // firefox可捕捉到空head, 让firefox等待head渲染出第一波childNode
- // chrome系head永远非空, head渲染完成后仍会出现规则丢失情况, 在此观测纯心理安慰, 最后由监听load事件的补丁解决
- await waitForHeadBuild()
- log('wait for head complete')
+ await waitForHTMLBuild()
+ log('wait for html complete')
}
-/**
- * 观测head内子元素, 出现子元素标志着head已构建完成
- * 若只观测head出现,head可能为未渲染状态,向head中插入节点仍可能报错,故观测head渲染完成
- * 耗时<50ms
- * @returns Promise
- */
-const waitForHeadBuild = () => {
+/** 观测html内出现第一个child, 标志着html tag已渲染 */
+const waitForHTMLBuild = () => {
return new Promise((resolve) => {
- const observer = new MutationObserver((mutationsList) => {
- for (const mutation of mutationsList) {
- if (mutation.target === document.head) {
- observer.disconnect()
- resolve()
- }
+ const observer = new MutationObserver(() => {
+ if (document.head) {
+ observer.disconnect()
+ resolve()
}
})
observer.observe(document, { childList: true, subtree: true })
diff --git a/src/main.ts b/src/main.ts
index c5696460..16848d14 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -47,21 +47,6 @@ const main = async () => {
}
}, 500)
- // 版权视频页 规则丢失补丁
- // 在打开新标签页版权视频页时, 可能丢失规则, firefox和chrome均复现
- // 测试可知, head内插入style均成功, 在DOMContentLoaded时, style数量正确
- // 在readyState=complete后, style数量有概率会减少, 导致规则丢失, 原因不明
- // 故在版权视频页监听load, 二次检查解决规则载入不全问题
- if (location.pathname.startsWith('/bangumi/play')) {
- window.addEventListener('load', () => {
- debug('bangumi page patch, recheck start')
- for (let i = GROUPS.length - 1; i >= 0; i--) {
- GROUPS[i].enableGroup()
- }
- debug('bangumi page patch, recheck complete')
- })
- }
-
// 全局启动/关闭快捷键 chrome: Alt+B,firefox: Ctrl+Alt+B
let isGroupEnable = true
document.addEventListener('keydown', (event) => {