// 知乎屏蔽词 - 内容脚本
(function () {
'use strict';
const CONTAINER_SELECTOR = '.ContentItem';
const TITLE_SELECTOR = '.ContentItem-title a';
const EXCERPT_SELECTOR = '.RichText.ztext';
let blockKeywords = [];
function processElement(el) {
if (el.dataset.blocked) return;
if (blockKeywords.length === 0) return;
const title = el.querySelector(TITLE_SELECTOR)?.textContent?.trim() || '';
const excerpt = el.querySelector(EXCERPT_SELECTOR)?.textContent?.trim() || '';
const text = title + ' ' + excerpt;
const matched = blockKeywords.find(k => k && text.includes(k));
if (matched) {
el.style.display = 'none';
el.dataset.blocked = '1';
console.log(`[知乎屏蔽词] 已屏蔽关键词「${matched}」→ ${title || excerpt.slice(0, 50)}`);
}
}
function processAll() {
document.querySelectorAll(CONTAINER_SELECTOR).forEach(processElement);
}
// 加载屏蔽词并开始处理
async function init() {
const result = await browser.storage.local.get('blockKeywords');
blockKeywords = result.blockKeywords || [];
// 监听存储变化,实时更新屏蔽词
browser.storage.onChanged.addListener((changes, area) => {
if (area === 'local' && changes.blockKeywords) {
blockKeywords = changes.blockKeywords.newValue || [];
// 重新处理页面(清除已处理标记)
document.querySelectorAll(CONTAINER_SELECTOR).forEach(el => {
delete el.dataset.blocked;
el.style.display = '';
});
processAll();
}
});
// 监听动态加载
new MutationObserver(mutations => {
mutations.forEach(m => {
m.addedNodes.forEach(node => {
if (node.nodeType !== 1) return;
if (node.matches?.(CONTAINER_SELECTOR)) {
processElement(node);
} else {
node.querySelectorAll?.(CONTAINER_SELECTOR).forEach(processElement);
}
});
});
}).observe(document.body, { childList: true, subtree: true });
processAll();
}
init();
})();