从未调用Content.js脚本来计算表行和刷新页面

时间:2015-09-17 22:03:14

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

我正在使用两个按钮进行chrome扩展:Start和Stop。点击开始按钮html页面,应该在特定计时器后开始刷新,点击停止时它应该停止刷新。

每次刷新后,HTML页面都有一个表格,其中包含id myTable.So,我想要有这个表的行数。

为了得到这个,我做了类似的事情:

首先弹出,我做了popup.js

window.onload = function() {
document.getElementById("startbutton").onclick = function() {
    chrome.extension.sendMessage({
        type: "table-row-count_start"
    });
}
document.getElementById("stopbutton").onclick = function() {
    chrome.extension.sendMessage({
        type: "table-row-count_stop"
    });
}
}

在background.js

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
switch(request.type) {
    case "table-row-count_start":
        alert("Refershing started");
        RefreshAndCount();
        break;
    case "table-row-count_stop":
        alert("Stop Refershing");
        break;
}
return true;
});

var RefreshAndCount = function(){
chrome.tabs.getSelected(null, function(tab){
    chrome.tabs.sendMessage(tab.id, {type: "table-row-count"});
    chrome.browserAction.setBadgeText({text: "Counting!"});
});
}

这将调用content.js,因为我们需要与HTML页面的DOM进行交互。在这个脚本中我做了类似的事情:

chrome.extension.onMessage.addListener(function(message, sender, sendResponse) {
switch(message.type) {
    case "table-row-count":
        var x = document.getElementById("myTable").rows.length;
        alert("Row count = " + x);
        var Refresh = confirm("Do you want to refresh the page?");
        if (Refresh)
        {
            setTimeout("location.reload(true);",5000);
        }
    break;
}
});

永远不会调用脚本content.js。我不知道为什么会这样。请帮忙。 它也只刷新一次,如何在固定定时器后保持参考。

这是manifest.json

{
"name": "Refresher",
"version": "0.0.1",
"manifest_version": 2,
"description" : "Refresh the site contents after a while",
"icons": { "32": "icon.jpg" },
"browser_action": {
    "default_icon": { "32": "icon.jpg" },
    "default_title": "Refersher",
    "default_popup": "browseraction/popup.html"
},
"background": {
    "scripts": ["background.js"],
    "persistent": true
},
"content_scripts": [{
    "matches": ["http://www.w3schools.com/html/tryit.asp?filename=tryhtml_table"],
    "js": ["content.js"]
}]
}

1 个答案:

答案 0 :(得分:0)

在这种情况下,您使用了已弃用的chrome.tabs.getSelected,它返回了标识为-1的错误标签,因此邮件从未发送,并且控制台中显示错误。

使用chrome.tabs.query

var RefreshAndCount = function() {
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        chrome.tabs.sendMessage(tabs[0].id, {type: "table-row-count"});
        chrome.browserAction.setBadgeText({tabId: tabs[0].id, text: "Counting!"});
    });
};

另请注意setBadgeText仅用于指定标签的方式。

N.B。 Alwaysalways使用调试程序检查错误。因此,您可以停止使用alert并开始使用console.log或检查/观察调试器中的变量。