You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mutation Observer脚本报错:参数1非Node类型,求原因及解决

解决MutationObserver的类型错误问题

嘿,我明白你作为非开发者遇到这个报错有多头疼,咱们一步步来搞定它!

错误原因

你控制台里的Uncaught TypeError是因为:
document.getElementsByTagName('img')返回的是一个HTMLCollection(元素集合),而MutationObserver.observe()方法要求第一个参数必须是单个Node节点或者NodeList列表,直接传这个集合就会触发类型不匹配的错误。

修复方案

我们可以换个更高效的方式:监听包含所有img的父元素(比如你代码里等待的#browser元素),同时开启subtree: true配置,这样就能监控父元素下所有img的属性变化了。另外,我们还可以优化你的逻辑,只在src被改成错误值时才替换,避免不必要的操作。

修改后的完整脚本:

function initMod(){
    // 等待#browser元素加载完成
    if(!document.querySelector("#browser")){
        setTimeout(initMod, 1000);
        return;
    }

    // 监听#browser元素(所有img的父容器)
    var targetNode = document.querySelector("#browser");
    // 配置:仅监听src属性变化,包含子树所有元素
    var config = { 
        attributes: true, 
        childList: false, 
        subtree: true, 
        characterData: false,
        attributeFilter: ['src']
    };

    var callback = function(mutationsList, observer) {
        for(var mutation of mutationsList) {
            const imgElement = mutation.target;
            // 检查当前src是不是被改成了错误的地址
            if (imgElement.src === 'https://hyperspace.marquiskurt.net/icons/favicon-32x32.png') {
                // 换回正确的src
                imgElement.src = 'chrome://favicon/https://hyperspace.marquiskurt.net/app/';
                console.log('已修复img的src地址');
            }
        }
    };

    var observer = new MutationObserver(callback);
    observer.observe(targetNode, config);
}

initMod();

改动说明

  • 把监听对象换成了#browser元素,这是你原本就在等待的容器,所有目标img应该都在它的子树中
  • 给config加上了attributeFilter: ['src'],只监听src属性的变化,减少不必要的触发
  • 移除了getElementsBySrc函数,直接通过mutation.target获取变化的元素,逻辑更简洁精准
  • 只在检测到错误src时才执行替换操作,避免重复修改

这样修改后,脚本就能正常运行,不会再报类型错误,而且能精准修复被篡改的img src啦!

内容的提问来源于stack exchange,提问作者Gnosis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:34:19