我正在尝试编写一个原始的google chrome扩展,它可以获取当前youtube频道的名称。所以我使用了MutationObserver来实现这一点。MutationObserver等待所需的节点出现在页面上。所以这段代码可以工作
var observer = new MutationObserver(function (mutations) {
if (document.querySelector("#text a")) {
console.log(document.querySelector("#text a").innerText);
observer.disconnect();
}
});
const target = document.querySelector("body");
const config = { childList: true, characterData: true };
observer.observe(target, config);
但由于youtube在没有重新加载的情况下更改了页面的内容。我试图重新启动MutationObserver以再次获取新的频道名称。但MutationObserver不会从addEventListener调用。此示例代码不起作用:
window.addEventListener("popstate", function() {
var observer = new MutationObserver(function (mutations) {
if (document.querySelector("#text a")) {
console.log(document.querySelector("#text a").innerText);
observer.disconnect();
}
});
const target = document.querySelector("body");
const config = { childList: true, characterData: true };
observer.observe(target, config);
});
我如何实现这个任务,以接收所需的节点与一个新的频道名称每次的url地址的变化,而无需重新加载页面?
window.addEventListener("popstate", function() {
var observer = new MutationObserver(function (mutations) {
if (document.querySelector("#text a")) {
console.log(document.querySelector("#text a").innerText);
observer.disconnect();
}
});
const target = document.querySelector("body");
const config = { childList: true, characterData: true };
observer.observe(target, config);
});
如果我向前或向后查看链接的历史,除了MutationObserver调用之外,任何代码都可以工作。
1条答案
按热度按时间ybzsozfc1#
popstate
仅由浏览器操作触发(即单击后退按钮等)。Youtube修改history
对象不会导致事件发生。chrome.webNavigation.onHistoryStateUpdated
会给予你一个事件来挂钩在MDN上提供了如何使用它的示例。