我正在编写 Tampermonkey 用户脚本,每次页面图标更改时我都需要触发一个函数。
例如:
页面上的favicon设置如下:
<link rel="shortcut icon" href="/dstatic/favicon.ico" type="image/x-icon" crossorigin="anonymous">
我尝试使用代理对象:
var targetObj = document.querySelectorAll('[rel="shortcut icon"]')[0]; var targetProxy = new Proxy(targetObj, { set: function (target, key, value) { console.log("Favicon changed"); target[key] = value; return true; } });
我预计:
console.log("Favicon changed");
在页面脚本中的图标更改时触发。
结果:
仅当您致电 targetProxy.href
时才会发生这种情况。如果您使用 targetProxy(页面本身所做的事情)以外的任何内容来调用它,则它不起作用。
你可以尝试MutationObserver。
以头部为目标,观察rel=icon元素何时发生变化。
const faviconLink = document.querySelector('link[rel="shortcut icon"]');
let observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.attributeName === 'href') {
console.log('Favicon changed');
myFunction(); // Call your function
}
});
});
const observerConfig = { attributes: true };
observer.observe(faviconLink,observerConfig);