首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Chrome扩展在特定时间打开URL

使用Chrome扩展在特定时间打开URL
EN

Stack Overflow用户
提问于 2013-05-16 17:22:22
回答 1查看 10.1K关注 0票数 10

我有一个Chrome扩展,我正在使用它在凌晨在一个网站上运行一些批处理作业。我已经有了一个内容脚本,当这个URL在Chrome中被调用时可以运行,并完成所有必要的工作。我现在有一个问题,找出最好的方法来串这个到一个调度程序,这样这个网址会在凌晨3:00自动在Chrome选项卡中打开我在一个专用的Azure虚拟机中运行所有这些代码,所以当脚本设置为运行时,不会有任何用户登录。当新的标签完成它的工作,它会自动关闭,这是我已经处理过的。

到目前为止,我已经尝试过使用Windows Task Scheduler打开Chrome,并将URL作为参数传入。然而,这种方法被证明是不可靠的!

如果我在虚拟机上打开Chrome,有没有什么原生的Chrome API可以用来在特定时间打开带有URL的选项卡?我还在一个单独的页面中使用了下面的javascript函数来触发URL打开,但是我没有机制来测试它是否已经在另一个选项卡中运行,所以这段代码将导致无穷无尽的新选项卡被打开,除非它可以调整为检查URL是否已经打开,我认为这将超出Javascript本身的范围。

代码语言:javascript
复制
var myUrlToCall = "http://www.myspecialurl.com/runme.html";

//IS 3 AM YET?
function runTimer() {
    setTimeout(function () {
        var dtNow = new Date();
        var hoursNow = dtNow.getHours() * 1;
        if (hoursNow >= 3) {
            //Open new window here (but how can I know if it's already open?)
            window.open(myUrlToCall);
        } else {
            runTimer();
        }
    }, 3000);
}

任何关于这方面的想法都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-16 18:33:52

event page中使用时,chrome.alarms API非常适合您的用例。

代码语言:javascript
复制
function createAlarm() {
    var now = new Date();
    var day = now.getDate();
    if (now.getHours() >= 3) {
        // 3 AM already passed
        day += 1;
    }
    // '+' casts the date to a number, like [object Date].getTime();
    var timestamp = +new Date(now.getFullYear(), now.getMonth(), day, 3, 0, 0, 0);
    //                        YYYY               MM              DD  HH MM SS MS
    
    // Create
    chrome.alarms.create('3AMyet', {
        when: timestamp
    });
}

// Listen
chrome.alarms.onAlarm.addListener(function(alarm) {
    if (alarm.name === '3AMyet') {
        // Whatever you want
    }
});
createAlarm();

关于创建选项卡:chrome.tabs.query方法可用于检查选项卡是否存在,并在必要时打开一个新选项卡。如果需要,我假设您想要关注现有的选项卡:

代码语言:javascript
复制
var url = '...';
chrome.tabs.query({
    url: url
}, function(tabs) {
    if (tabs.length === 0) {
        chrome.tabs.create({ url:url, active: true });
    } else {
        // Focus first match
        chrome.tabs.update(tabs[0].id, { active: true });
    }
});
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16583574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档