繁体   English   中英

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

[英]Open a URL at a specific time with a Chrome Extension

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

到目前为止,我已经尝试使用 Windows 任务计划程序打开 Chrome,并将 URL 作为参数传入。 然而,这种方法被证明是有些不可靠的!

如果我让 Chrome 在虚拟机上保持打开状态,是否有任何本地 Chrome API 可用于在特定时间打开带有 URL 的标签页? 我还在一个单独的页面中使用了以下 javascript 函数来触发 URL 打开,但是我没有机制来测试它是否已经在另一个选项卡中运行,因此此代码将导致无休止的新选项卡被打开,除非它可以适合检查 URL 是否已经打开,我认为这将超出 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);
}

对此的任何想法将不胜感激。

chrome.alarms API 非常适合您的用例,可在事件页面中使用

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方法可用于检查选项卡是否存在,并在必要时打开一个新选项卡。 我假设您希望在需要时关注现有选项卡:

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 });
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM