Javascript 在5000秒计时器后刷新并打印警报
我正在做一个chrome扩展来保持刷新页面,除非选择了停止按钮。但我只能做一次。下面是我的background.js代码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.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);