在特定时间自动刷新页面

时间:2013-12-10 18:45:01

标签: javascript jquery html google-chrome-extension refresh

我正在尝试向Chrome扩展程序添加一些代码,这将在一天的特定时间刷新特定页面。我发现编码涉及向标题添加元标记,或标记到正文但我无法编辑页面的html,所以这是不可能的。这是我现在的代码,但似乎没有工作 -

    //60000 milliseconds is 1 minute
window.setInterval("checkForRefresh()", 60000);

function checkForRefresh() {
   var now = new Date();
   if (now.getHours() == 14 && now.getMinutes() == 24) {
      window.location.reload();
   }
}

它似乎已经工作了几次,但现在它停止了工作。不确定出了什么问题。

有关如何解决此问题的任何想法?

3 个答案:

答案 0 :(得分:3)

使用location.reload(true)

这将重新加载页面并绕过缓存,但是,如果您不想绕过缓存,请设置然后使用location.reload(false)

看看this

答案 1 :(得分:1)

window.refresh()不是一个功能。请改为window.location.reload()

答案 2 :(得分:0)

要获得更可靠,更资源友好的解决方案,您可以在非持久性背景页面(又名 chrome.alarms API )中使用 event page 。 E.g:

manifest.json

{
    "manifest_version": 2,

    "name":    "Test Extension",
    "version": "0.0",
    "offline_enabled": false,

    "background": {
        "persistent": false,
        "scripts": ["background.js"]
    },

    "permissions": [
        "alarms",
        "tabs"
    ]
}

background.js

var refreshAlarmName = 'refreshAlarm';

/* Refresh at: 10 Dec 2013, 22:11:00 UTC */
var utcYear    = 2013;
var utcMonth   = 11;   // <-- watch out: this is zero-based
var utcDate    = 10;
var utcHours   = 22;
var utcMinutes = 11;

/* Convert a date (year, month, dayOfMonth, hours, mins)
 * to milliseconds past the epoch */
function at(year, month, dayOfMonth, hours, mins) {
    var date = new Date();

    date.setUTCFullYear(year);
    date.setUTCMonth(month);
    date.setUTCDate(dayOfMonth);
    date.setUTCHours(hours);
    date.setUTCMinutes(mins);
    date.setUTCSeconds(0);
    date.setUTCMilliseconds(0);

    return date.getTime();
}

chrome.alarms.create(refreshAlarmName, {
    when: at(utcYear, utcMonth, utcDate, utcHours, utcMinutes)
});

chrome.alarms.onAlarm.addListener(function(alarm) {
    if (alarm.name !== refreshAlarmName) {
        return;
    }

    chrome.tabs.query({ url: "*://www.eastbay.com/*" }, function(tabs) {
        tabs.forEach(function(tab) {
            chrome.tabs.reload(tab.id, { bypassCache: true });
        });
    });
});

重要提示:

根据文件:

  

出于性能原因,警报可能会延迟超出此范围的任意数量。

根据我的经验,任意数量几乎不可忽视,但如果准确时间至关重要,您可能需要考虑更复杂的机制,其中背景页面触发在目标时间前几分钟发出一个警报,它会注入一个内容脚本,设置一个30秒的间隔来检查目标时间并刷新。