0

出于某种原因,当我尝试在Chrome扩展中使用getElementsByTagName时,我得到一个空列表。例如:getElementsByTagName在Chrome扩展中不起作用

background.js

document.body.onload = function(){ 
    chrome.browserAction.onClicked.addListener(function(tab) { 
     alert(document.getElementsByTagName("div").length); 
    }); 
}; 

会提醒我 “0”。另外,如果在我的addListener函数中创建一个div并将其附加到body,则长度变为“1”。因此,扩展程序似乎只检测扩展点击后创建的对象......任何想法?

P.S.这里是我的清单文件

的manifest.json

{ 
    "name": "tester", 
    "version": "1.0", 
    "manifest_version": 2, 
    "background": { 
     "scripts": ["background.js"], 
     "persistent": false 
    } 
} 

回答

2

background.js脚本在后台页面上下文中执行。在这里,由于您只声明后台脚本,您的后台页面会生成,并且没有任何内容。

您可以通过转到chrome:// extensions /然后单击扩展名旁边的Inspect views: _generated_background_page.html链接来查看生成的背景页面。它看起来是这样的:

<!DOCTYPE html> 
<html> 
    <head></head> 
    <body> 
    <script src="background.js"></script> 
    </body> 
</html> 

正如你所看到的,有没有<div>元素,因此document.getElementsByTagName("div").length将返回0

如果你想要得到的网页的内容,你会必须使用content script

0

只是后续行动,这里是我使用的代码。它通过注入脚本到有源标签每当扩展按键(更多信息here

injected.js

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(null, {file: "testscript.js"}); 
}); 

testscript.js

document.body.style.backgroundColor="red"; 

manifest.json

{ 
    "name": "injecttester", 
    "version": "1.0", 
    "manifest_version": 2, 
    "browser_action": { 
    "default_icon": "icon.png" 
    }, 
    "background": { 
     "scripts": ["injected.js"], 
     "persistent": false 
    }, 
    "permissions": [ 
    "activeTab", 
    ] 
}