Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法读取属性';innerHTML';Wikipedia页面上的空值_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript 无法读取属性';innerHTML';Wikipedia页面上的空值

Javascript 无法读取属性';innerHTML';Wikipedia页面上的空值,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我不是JS开发人员,所以请原谅我可能编写的任何可怕的代码 大家好 我正在做这个chrome扩展项目,我遇到了一个非常奇怪的错误。该扩展旨在浏览网页并替换某些单词。除了维基百科,我尝试过的所有网站似乎都很好用。在wikipedia上,只有页面第一段中的单词被替换,然后我得到一个uncaughttypeerror:cannotreadproperty'innerHTML'的null错误抛出 Content.js var nodes = []; var wordMap = {'color':'colo

我不是JS开发人员,所以请原谅我可能编写的任何可怕的代码

大家好

我正在做这个chrome扩展项目,我遇到了一个非常奇怪的错误。该扩展旨在浏览网页并替换某些单词。除了维基百科,我尝试过的所有网站似乎都很好用。在wikipedia上,只有页面第一段中的单词被替换,然后我得到一个
uncaughttypeerror:cannotreadproperty'innerHTML'的null
错误抛出

Content.js

var nodes = [];
var wordMap = {'color':'colour'}
var regex = new RegExp(Object.keys(wordMap).join("|"),"gi");

if( document.readyState !== 'loading' ) {
    console.log( 'document is already ready, just execute code here' );
    myInitCode();
} else {
    document.addEventListener('DOMContentLoaded', function () {
        console.log( 'document was not ready, place code here' );
        myInitCode();
    });
}

function myInitCode() {
    var walker = document.createTreeWalker(
    document.body,
    NodeFilter.SHOW_TEXT,
    function(node) {
        var matches = node.textContent.match(regex);

        if(matches) { 
            return NodeFilter.FILTER_ACCEPT;
        } else {
            return NodeFilter.FILTER_SKIP;
        }
    },
    false);

    while(walker.nextNode()) {
        nodes.push(walker.currentNode);
    }

    for(var i = 0; node=nodes[i] ; i++) {
        node.parentNode.innerHTML = node.parentNode.innerHTML.replace(regex, function(match) {
            return wordMap[match];
        });
    }
}
Manifest.json内容脚本部分

"content_scripts": [
    {
        "matches": [
            "*://*/*"
        ],
        "js": [
            "content.js"
        ],
        "run_at": "document_end" 
    }
]
以下是发生错误的屏幕截图:

下面是错误的屏幕截图:

我试着四处寻找答案,我认为发生错误是因为DOM还没有加载,所以我添加了代码来解决这个问题,但错误仍然发生。 你知道为什么会这样吗


谢谢大家!

正如@IsaacVidrine在对问题的评论中指出的,错误是由
节点
没有
父节点
引起的。要修复此问题,请检查for循环中是否存在
parentNode
,如下所示:

for(var i = 0; node=nodes[i] ; i++) {
        if(node.parentNode){
            node.parentNode.innerHTML = node.parentNode.innerHTML.replace(regex, function(match) {
                return wordMap[match];
            });
        }
    }

正如@IsaacVidrine在对问题的评论中指出的,错误是由
节点
没有
父节点
引起的。要修复此问题,请检查for循环中是否存在
parentNode
,如下所示:

for(var i = 0; node=nodes[i] ; i++) {
        if(node.parentNode){
            node.parentNode.innerHTML = node.parentNode.innerHTML.replace(regex, function(match) {
                return wordMap[match];
            });
        }
    }

无法访问的内容是否在iframes中?意味着
节点
对象上不存在
父节点
。。。只需做一个检查并说
if(node.parentNode)
我想您可以调试哪个节点的parentNode为null<代码>如果(!node.parentNode)调试器@IsaacVidrine是的,很好地发现了。我真傻@Archer for循环没有问题,请自己测试。无法访问的内容是否在iframes中?表示
节点
对象上不存在
父节点
。。。只需做一个检查并说
if(node.parentNode)
我想您可以调试哪个节点的parentNode为null<代码>如果(!node.parentNode)调试器@IsaacVidrine是的,很好地发现了。我真傻@阿切尔:for循环没有问题,自己测试一下。