我正在尝试从Chrome扩展程序中的Netflix电影页面创建一个内容HTML为alert()
的javascript <p class="synopsis">...</p>
。
这是我的background.js
window.onload = function() {
chrome.browserAction.onClicked.addListener(function(tab) {
var synopsis = document.getElementsByClassName("synopsis").innerhtml;
alert(synopsis);
});
}
这是我的manifest.json:
{
"name": "Get Synopsis",
"version": "1.0.0",
"description": "Get synopsis",
"manifest_version": 2,
"browser_action": {
"default_icon": "icon.png"
},
"permissions":[ "tabs", "*://www.netflix.com/*" ],
"background": {
"scripts": ["background.js"]
}
}
有谁可以指出我做错了什么?我似乎无法找到错误。
答案 0 :(得分:2)
我可能错了,但我相信getElementsByClassName
会返回一个数组或至少某种元素列表,因此innerHTML
无法使用。另外,我非常确定innerHTML
(不是innerhtml
)。这两个错误都应该出现在控制台中。
修改:因为它是一个数组,您需要先选择您之后的数组元素,然后然后使用innerHTML
。因此,如果您想要具有指定类的 first 元素,那么您需要...getElementsByClassName('foo')[0].innerHTML
。
答案 1 :(得分:0)
document.getElementsByClassName()
返回数组,因此您必须使用索引器访问元素,如下所示:
document.addEventListener("DOMContentLoaded", function() {
chrome.browserAction.onClicked.addListener(function(tab) {
var synopsis = document.getElementsByClassName("synopsis")[0].innerHTML;
alert(synopsis);
});
});
编辑:对事件进行更正。
答案 2 :(得分:0)
现有答案指向代码中的实际错误,但真正的主要问题是您应该查看有关chrome扩展架构的文档。
特别是,文档并不意味着背景页面上活动选项卡的文档。
相反,您可以使用内容脚本并将弹出代码(不是背景)中的消息发送到活动选项卡,要求提供概要。
可能还有一种方法可以直接从后台获取活动标签html,但我搜索了所有权限,除了使用内容脚本之外没有看到任何权限。 https://developer.chrome.com/extensions/declare_permissions