Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在5000秒计时器后刷新并打印警报_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

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

Javascript 在5000秒计时器后刷新并打印警报,javascript,google-chrome,google-chrome-extension,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"); Refres

我正在做一个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的情况下继续引用该页面?

您可以使用chrome.storage.local来存储数据,这些数据将随时间和使用环境的不同而保存。您可以将布尔值设置为true或false以启用或禁用自动加载。然后,您只需在单击浏览器操作时设置它,并在内容脚本中检查它,以了解是否需要重新加载

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

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


如果chrome local storage中名为“autoreload_enabled”的布尔值设置为true,则会每隔
reloadDuration
重新加载一次页面。

不完全相关,但当前延迟仅为所需延迟的1000分之一。@RayonDabre我使用过它。检查编辑的帖子。关键是当页面刷新一次时,我需要再次单击开始按钮来完成所有步骤。如何避免这种情况。在
DOMContentLoaded
事件中,从
localStorage
中检查值,并根据该值管理您的视图。我认为在您的情况下,chrome.storage.local比chrome.storage.sync更好,因为您不需要在多个设备上共享数据。或者我误解了您试图记录的内容,您是否可以借助代码提供更多上下文?我得到了本地存储的部分。但是如何一次又一次地自动加载对我来说是个问题,但它并没有再次触发background.js的chrome.extension.onMessage.addListener函数。我希望在每一页上都能一遍又一遍地调用此侦听器,并使用case“table-row-count\u start”引用,除非按下停止按钮。我还不明白您上次编辑的评论。像这样的?这将在页面重新加载时向您的后台页面发送一条消息。好的,最后一条,即使我切换到其他选项卡或最小化我的chrome浏览器,如何继续引用该页面?
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);