Chrome扩展程序后台页面状态

hap

如果用户未登录该扩展程序,我将实现一个附加到页面的通知,但我只希望该扩展程序在每个浏览器会话中执行一次此操作,这样,如果他们访问的每个页面,他们都不会收到烦人的通知他们尚未登录。

他们这样做的方式是将背景脚本中的布尔值初始化为false,它表示是否已附加通知。

每当用户未登录时,后台脚本都会收到一条消息,并且基于上述布尔值,它将通知用户他们尚未登录。

background.js

var has_been_notified = false;
chrome.extension.onMessage.addListener(function(msg, sender) {
    if(!has_been_notified) {
        chrome.tabs.sendMessage(sender.tab.id, "login_notification");
        has_been_notified = true;
    }
})

当布尔值更改为true时,条件条件应该运行一次,并且永远不再运行。这是基于以下假设:后台脚本的状态在整个浏览器会话中都会保留,并且永远不会再次部署。

在测试扩展程序时,即使在初始通知触发后,一些随机页面也会收到通知。获得该页面的页面大约占十分之一,但完全不受我访问的网站的影响。

可汗

听起来您正在尝试使用“"persistent": false 事件”页面这是推荐的方法,但它有责任了解其工作方式。

如果您的后台脚本有一段时间没有执行任何操作(以十分之一秒为单位),则该脚本会定期完全卸载。这会丢失JavaScript上下文的状态,包括所有变量。Chrome会记住已附加侦听器的事件,如果事件发生,则再次加载页面,然后会触发该事件。

如果您需要在整个浏览器会话中将运行时状态保留在内存中,请使用storageAPI或IndexedDB。由于事件页面不会长时间保持加载状态,因此您不能再依赖于全局变量来获取运行时状态。

因此,您需要将状态保存在chrome.storage.local

// Don't use extension.sendMessage/onMessage, it's deprecated
chrome.runtime.onMessage.addListener(function(msg, sender) {
    chrome.storage.local.get(
        {has_been_notified: false}, // Providing a default if storage is empty
        function(data) {
            if(!data.has_been_notified) {
                chrome.tabs.sendMessage(sender.tab.id, "login_notification");
                chrome.storage.local.set({has_been_notified: true});
            }
        }
    );
});

如果您需要在每次扩展启动时重置此设置,请钩入runtime.onStartup而不是执行脚本(脚本可以反复重启):

chrome.runtime.onStartup.addListener(function() {
    chrome.storage.local.set({has_been_notified: false});
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Chrome通知未从Chrome扩展程序后台页面显示

来自分类Dev

Chrome通知未从Chrome扩展程序后台页面显示

来自分类Dev

如何从Chrome扩展程序后台脚本访问页面变量

来自分类Dev

如何从Chrome扩展程序的后台js访问页面元素

来自分类Dev

Chrome扩展程序后台页面和内容脚本同步

来自分类Dev

弹出式窗口中的Chrome扩展程序后台页面

来自分类Dev

Chrome扩展程序后台页面无效,使该扩展程序只需点击2次即可运行

来自分类Dev

chrome扩展程序内部是否使用JSON.stiringify将Message传递到后台页面?

来自分类Dev

chrome扩展程序-将数据从后台传递到自定义html页面

来自分类Dev

点击事件在Chrome扩展程序的“后台”页面中不起作用

来自分类Dev

Chrome扩展程序后台页面以编程方式注入的内容脚本多次注入

来自分类Dev

无法在Chrome扩展程序中从后台页面向内容脚本发送消息

来自分类Dev

Chrome 扩展程序 - 使用消息传递的后台页面表单提交。表单只提交一次

来自分类Dev

从后台Chrome扩展程序访问窗口对象

来自分类Dev

Chrome扩展程序后台脚本中的AngularJS

来自分类Dev

扩展程序页面中的Chrome图标

来自分类Dev

使用Chrome扩展程序淡出整个页面

来自分类Dev

在Chrome扩展程序中将变量从后台传递到弹出窗口

来自分类Dev

Chrome扩展程序:后台脚本捕获网络和HTTP错误

来自分类Dev

Chrome扩展程序后台脚本不起作用

来自分类Dev

Google Chrome扩展程序中有多个后台脚本吗?

来自分类Dev

Chrome扩展程序:如何使后台等待执行脚本?

来自分类Dev

Chrome邮件扩展程序:从注入脚本到后台

来自分类Dev

如何在Chrome扩展程序中动态运行后台脚本?

来自分类Dev

在Chrome扩展程序后台脚本上接收CORS策略

来自分类Dev

Chrome扩展程序:仅在刷新后,后台脚本才会启动

来自分类Dev

Chrome扩展程序:后台脚本捕获网络和HTTP错误

来自分类Dev

Chrome扩展程序后台XMLHttpRequest代理服务器

来自分类Dev

Chrome邮件扩展程序:从注入脚本到后台

Related 相关文章

  1. 1

    Chrome通知未从Chrome扩展程序后台页面显示

  2. 2

    Chrome通知未从Chrome扩展程序后台页面显示

  3. 3

    如何从Chrome扩展程序后台脚本访问页面变量

  4. 4

    如何从Chrome扩展程序的后台js访问页面元素

  5. 5

    Chrome扩展程序后台页面和内容脚本同步

  6. 6

    弹出式窗口中的Chrome扩展程序后台页面

  7. 7

    Chrome扩展程序后台页面无效,使该扩展程序只需点击2次即可运行

  8. 8

    chrome扩展程序内部是否使用JSON.stiringify将Message传递到后台页面?

  9. 9

    chrome扩展程序-将数据从后台传递到自定义html页面

  10. 10

    点击事件在Chrome扩展程序的“后台”页面中不起作用

  11. 11

    Chrome扩展程序后台页面以编程方式注入的内容脚本多次注入

  12. 12

    无法在Chrome扩展程序中从后台页面向内容脚本发送消息

  13. 13

    Chrome 扩展程序 - 使用消息传递的后台页面表单提交。表单只提交一次

  14. 14

    从后台Chrome扩展程序访问窗口对象

  15. 15

    Chrome扩展程序后台脚本中的AngularJS

  16. 16

    扩展程序页面中的Chrome图标

  17. 17

    使用Chrome扩展程序淡出整个页面

  18. 18

    在Chrome扩展程序中将变量从后台传递到弹出窗口

  19. 19

    Chrome扩展程序:后台脚本捕获网络和HTTP错误

  20. 20

    Chrome扩展程序后台脚本不起作用

  21. 21

    Google Chrome扩展程序中有多个后台脚本吗?

  22. 22

    Chrome扩展程序:如何使后台等待执行脚本?

  23. 23

    Chrome邮件扩展程序:从注入脚本到后台

  24. 24

    如何在Chrome扩展程序中动态运行后台脚本?

  25. 25

    在Chrome扩展程序后台脚本上接收CORS策略

  26. 26

    Chrome扩展程序:仅在刷新后,后台脚本才会启动

  27. 27

    Chrome扩展程序:后台脚本捕获网络和HTTP错误

  28. 28

    Chrome扩展程序后台XMLHttpRequest代理服务器

  29. 29

    Chrome邮件扩展程序:从注入脚本到后台

热门标签

归档