使用Chrome扩展程序中另一个网站的innerHTML创建变量

时间:2015-06-03 21:14:56

标签: javascript json google-chrome google-chrome-extension

我正在尝试从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"]
    }
}

有谁可以指出我做错了什么?我似乎无法找到错误。

3 个答案:

答案 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