Google chrome extension 在特定网站www.xyz.com在Chrome中加载预定义时间后发送windows通知

Google chrome extension 在特定网站www.xyz.com在Chrome中加载预定义时间后发送windows通知,google-chrome-extension,Google Chrome Extension,目前我正在开发一个Chrome扩展,它将在我的桌面上发出120秒的通知。特定网站(比如)加载到Chrome的任何选项卡之后。使用background.js和manifest.JSON我需要做什么?我已经准备好通知、消息等的设计,但它是使用chrome.alarms API以120秒的间隔交付的。它不考虑加载哪个网页或其他任何类型的网页。我是初学者。您必须在manifest.json上请求“选项卡”和“警报”权限 然后在后台脚本中为chrome.tabs.onUpdate定义一个事件处理程序 用于

目前我正在开发一个Chrome扩展,它将在我的桌面上发出120秒的通知。特定网站(比如)加载到Chrome的任何选项卡之后。使用background.js和manifest.JSON我需要做什么?我已经准备好通知、消息等的设计,但它是使用chrome.alarms API以120秒的间隔交付的。它不考虑加载哪个网页或其他任何类型的网页。我是初学者。

您必须在manifest.json上请求“选项卡”和“警报”权限

然后在后台脚本中为chrome.tabs.onUpdate定义一个事件处理程序 用于检查url(已更改或插入任何选项卡中)是否存在。 如果更新url与此模式匹配,则必须从现在起设置两分钟警报

大概是这样的:

function alarm_manager(alarm) {
    if (alarm.name.startsWith('a_name_for_your_alarm')) {
        console.log('Wake up, the alarm has set')
/* you can use here also an alert or a notification */
    }
}

chrome.alarms.onAlarm.addListener(alarm_manager);

chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
    if (changeInfo?.status == "complete") {
        if (tab.url.includes("www.xyx.com"))
            chrome.alarms.create('a_name_for_your_alarm' + '_' + tabId, { delayInMinutes: 2 });
        else
            chrome.alarms.clear('a_name_for_your_alarm' + '_' + tabId);
    }
});

chrome.tabs.onRemoved.addListener((tabId, removeInfo) => {
    chrome.tabs.get(tabId, tab => {
        if (tab.url.includes("www.xyx.com"))
            chrome.alarms.clear('a_name_for_your_alarm' + '_' + tabId);
    })
});
您尚未指定是否必须在每次导航遇到该网站时或仅一次时安排此警报


根据您的需要调整代码。

我想到的第一件事 是将url已更改为的选项卡ID存储到数组中

然后在onUpdate事件处理程序中检查该tabId是否已经存在于该数组中。 如果它不存在,则将其添加到数组中并安排一个报警(记住给报警一个唯一的名称,例如通过添加tabId本身作为后缀) 如果tabId已经存在于数组中,则不执行任何操作

但是,如果在触发报警之前关闭选项卡,则还必须删除与选项卡ID(chrome.alarms.clear)相关的报警 通过关闭该选项卡,还可以删除相应数组中的元素,以避免将其放大太多。 要完成最后两件事,您需要利用事件:

chrome.windows.on已删除和chrome.tabs.on已删除

如果您使用的是持久化背景脚本,请执行上述操作


如果没有,您需要将阵列存储在chrome.storage.local中

谢谢您的帮助,Robbi!对于chrome中的给定选项卡,通知只应发送一次,对于每个有网页www.xyz.com的选项卡,通知必须单独发送120秒。网页加载到该选项卡后。例如,如果在选项卡1和选项卡2中,分别在下午5:02和6:00加载www.xyz.com,则将在5:04和6:02发送两个单独的桌面通知。如果选项卡在120秒内关闭,则不应发送该选项卡的通知。加载后。这非常有效,只是即使我在2分钟内关闭选项卡,或者在同一选项卡中加载其他网页,它也会发出通知。我想添加一个条件,用于检查发送通知时是否仍加载了网页“www.xyz.com”。我该怎么做?请注意,我对代码做了一些修改。实际上,当我更改选项卡url时,我将删除相应的报警,即使它不存在(它不应生成任何错误)。当我关闭选项卡时,情况并没有太大的不同,因为我无法直接从onRemove事件处理程序访问选项卡url,所以我必须首先使用该选项卡ID查询选项卡。但是当您关闭(最后一个\唯一一个)窗口时,它将无法工作。当你打开浏览器时,所有已经安排好的警报都会启动,除非你研究了一个系统来阻止它。工作完美!另外一条注释:创建chrome.notifications.clear('notification_name')后使用它。我发现如果我们不这样做,随后的通知将被抑制。通知出现的时间并不总是2分钟。有时是2分钟,有时是2:30,有时是2:45。原因可能是什么?如何纠正?我们可以使用报警以外的任何功能吗?基本上,您可以使用一个数组,该数组在创建报警时增加,在触发报警时清空(只要未设置自动重复)。使用chrome.alarms.getAll,您可以查询活动报警并获取报警数组。请注意,所有chrome.alarms API都是异步的。如果您对它们有问题,请使用我之前建议的标准数组。