Chrome扩展:内容脚本找不到dom元素

Chrome extension: content script not finding dom elements

本文关键字:找不到 dom 元素 脚本 扩展 Chrome      更新时间:2023-09-26

我正在编写一个chrome扩展,并有以下代码

popup.html:

   <script type='text/javascript' src='content.js'></script>

content.js:

var container = document.getElementById('viewer')
container.style['white-space'] = 'nowrap'
var node_list = document.getElementsByClassName('page')
Array.prototype.forEach.call(node_list, function(page) {
  page.style['display'] = 'inline-block'
})

manifest.json:

{
    "name": "horizontal_pdf",
    "version": "0.0.1",
    "manifest_version": 2,
    "browser_action": {
        "default_title": "My Title",
        "default_popup": "popup.html",
        "default_icon": {
            "16": "icons/16x16.jpg",
            "32": "icons/32x32.jpg"
        }
    }
}

但当我点击图标并查看控制台时,我看到了错误消息:

Uncaught TypeError: Cannot read property 'style' of null 

在content.js的第2行。因此,它无法找到id为viewer的div。但当我看到页面的dom时,它就在那里。我做错了什么?

PS:我没有在清单中指定内容脚本,因为我不希望它自动触发,但只有当用户点击图标时。

根据Google的文档,您可以使用程序注入。

在后台脚本中,您可以添加:

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

或者在你的弹出脚本中,你可以调用:

chrome.tabs.executeScript(null, {file: "content.js"});

(您需要以任何方式添加activeTab权限)

https://developer.chrome.com/extensions/content_scripts#pi

如果你想在popup.html/js中获得dom,你必须为内容脚本添加content.js,然后向popup.js发送消息,你可以从popup.jss调用content.js来获取信息。。。后台脚本无法访问dom。。。这就是我所做的。。。