在5000秒的计时器后刷新并打印警报

时间:2015-09-18 10:10:26

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

除非选择停止按钮,否则我正在制作Chrome扩展程序以继续刷新页面。但我只能做一次。这是我的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.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!"});
});
};

在content.js中我这样做了:

chrome.extension.onMessage.addListener(function(message, sender, sendResponse) {
alert(message.type);
switch(message.type) {
    case "table-row-count":
        var x = document.querySelector('table').rows.length;
        chrome.storage.sync.set({'value': x}, function() {
            console.log('Settings saved');
        });
        chrome.storage.sync.get(["value"], function(items){
           console.log(items);
        });
        alert("Row count = " + x);
        setTimeout(function(){
            location.reload();
        },100);

        break;
}
});

chrome.storage.onChanged.addListener(function(changes, namespace) {
    for (key in changes) {
        if(key=='value'){
            var storageChange = changes[key];
            console.log('Storage key "%s" in namespace "%s" changed. ' +
                  'Old value was "%s", new value is "%s".',
                  key,
                  namespace,
                  storageChange.oldValue,
                  storageChange.newValue);
    }
}
});

刷新后我想每次都打印当前的行计数警报。请帮助如何做到这一点。

这项工作很好,只需一次刷新,但之后我又必须从弹出窗口中选择开始按钮。

我想要一些方法,我不需要再次单击开始按钮,整个过程重复,将前一行计数存储在缓存或其他内容。

popup.js

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

还帮助我即使切换到其他标签或最小化我的Chrome,如何继续引用该页面?

1 个答案:

答案 0 :(得分:1)

您可以使用chrome.storage.local存储将在您使用它的上下文中保存的数据。您可以将布尔值设置为true或false以启用或禁用自动重载。然后,您只需在单击浏览器操作时进行设置,然后在内容脚本中进行检查,以了解是否必须重新加载。

一个可能的简单实现应该是这样的:(这取决于预期的行为)

content.js (必须在页面中注入自动重载)

var reloadDuration = 5000;

function autoreload()
{
    chrome.local.storage.get("autoreload_enabled", function(result)
    {
        if(result.autoreload_enabled)
        {
            chrome.runtime.sendMessage({type: "table-row-count"});
            window.location.reload();
        }
    }
}

setTimeout(autoreload, reloadDuration);

如果名为reloadDuration的chrome本地存储中的布尔值设置为true,则会每隔autoreload_enabled重新加载一次页面。