Dom Chrome扩展-内容脚本无法按类名查找元素

Dom Chrome扩展-内容脚本无法按类名查找元素,dom,google-chrome-extension,getelementsbyclassname,content-script,Dom,Google Chrome Extension,Getelementsbyclassname,Content Script,我试图使用Chrome扩展的内容脚本从页面访问具有特定类名的元素。到目前为止,内容脚本可以使用document.getElementById()成功地找到具有特定id的元素,但使用document.getElementsByCassName()或jQuery的$(“.className”)不会产生任何结果。为了进行测试,我使用“header”作为类名,我运行扩展的每个网站的数组长度都是0。你知道我可能遗漏了什么吗?以下是我一直在测试的内容: manifest.json =============

我试图使用Chrome扩展的内容脚本从页面访问具有特定类名的元素。到目前为止,内容脚本可以使用document.getElementById()成功地找到具有特定id的元素,但使用document.getElementsByCassName()或jQuery的$(“.className”)不会产生任何结果。为了进行测试,我使用“header”作为类名,我运行扩展的每个网站的数组长度都是0。你知道我可能遗漏了什么吗?以下是我一直在测试的内容:

manifest.json
=================
{
    "name": "Sample Extension",
    "version": "0.0.1",
    "description": "Sample extension",
    "icons": {"128": "icon.png"},
    "permissions": [
        "tabs", "<all_urls>"
    ],
    "browser_action": {
        "default_icon": "browseraction.png",
        "default_title": "Sample",
        "popup": "popup.html"
    },
    "content_scripts": [
        {
            "matches": [ "<all_urls>" ],
            "js": ["scripts/contentscript.js"],
            "run_at": "document_end"
        }
    ]
}

contentscript.js
===================
var elems = document.getElementsByClassName("header");
alert( elems.length );
manifest.json
=================
{
“名称”:“示例扩展”,
“版本”:“0.0.1”,
“说明”:“示例扩展”,
“icons”:{“128”:“icon.png”},
“权限”:[
“制表符”
],
“浏览器操作”:{
“默认图标”:“browseraction.png”,
“默认标题”:“示例”,
“popup”:“popup.html”
},
“内容脚本”:[
{
“匹配项”:[“”],
“js”:[“scripts/contentscript.js”],
“运行时间”:“文档结束”
}
]
}
contentscript.js
===================
var elems=document.getElementsByClassName(“标题”);
警报(元素长度);

您的代码非常简单明了,不会造成问题。事实上,我只是使用了你的确切代码(包括你提供的“says”类和网站)和
alert()
每次都说
1
(这是正确的)


我最好的猜测是,在
contentscript.js
中进行更改后,您没有重新加载扩展,或者其他扩展正在干扰并导致这种奇怪的行为。在测试扩展之前,请尝试禁用其他扩展。

这可能是一个愚蠢的问题,但您确定HTML中有样式类为“header”的元素吗?老实说,我实际上并没有使用“header”作为类名,我只是觉得为了这个示例,它更通用。我使用的测试网站是,我使用“says”作为我的类名。谢谢你测试这个,@Konrad Dzwinel!有趣的是,现在当我重新加载页面时,脚本会用正确的数字通知我,
1
,但当我使用浏览器操作时,它会给我一个0的结果。看到我可以在某个时候收集类元素,我确实松了一口气,我想这打开了一个全新的潘多拉盒子,里面有什么是可以访问的。您从未说过您正在使用浏览器操作执行与内容脚本相同的操作。你把两件事混在一起了。事实上,我想我可能知道发生了什么。我认为内容脚本是按照清单的指示在“document_end”运行的。然后,由浏览器操作触发的my popup.html会在其主体的末尾运行,它会运行,但会在弹出窗口的DOM上下文中运行,而不是在浏览器当前查看的页面中运行。再次感谢康拉德,你帮助我实现了这一顿悟!没错,我说得再好不过了:)从弹出窗口你不能直接访问网页。您可能需要使用背景页面作为代理(搜索“message passing”并查看此页面底部的视频:)。祝你好运