javascript - chrome 扩展:持久性后台脚本何时停止运行?
问题描述
如果我的 chrome 扩展有一个持久的后台脚本,我可以使用它将数据存储在我最终想要存储在 chrome.storage.local 中的脚本中。什么时候/什么事件触发后台脚本停止运行(以便我可以添加回调以在本地数据超出范围之前将数据存储在 chrome.storage.local 中)?
解决方案
后台脚本可以注册为持久(在启用扩展且未崩溃时始终运行)或非持久(不总是但runtime.getBackgroundPage
在调用后台脚本中注册的任何运行时事件回调时临时运行)
它们在“背景”字段下的清单中注册,并且应将“持久”指定false
为非持久背景脚本/页面。
} “背景”: { “脚本”:[“background.js”], “持久”:错误 } }
当非持久性后台脚本被卸载时有一个运行时事件回调(因为它们在几秒钟不活动后自行卸载),当具有持久性后台脚本的扩展被禁用(或崩溃时)它不会被调用 -课程)。
chrome.runtime.onSuspend.addListener(function() { console.log("正在卸载。"); });
您可以使用这个简单的扩展来验证这一点:
清单.json
{ "name": "onSuspend", “描述”:“悬而未决”, “版本”:“1.0”, “清单版本”:2, “权限”:[ “贮存” ], “背景”: { “脚本”:[“background.js”], “持久”:真的 } }
背景.js
chrome.runtime.onSuspend.addListener(function() {
console.log("Unloading.");
chrome.storage.local.set({"Saved": "yes"}, function() {});
});
chrome.storage.local.get("Saved", function(data) {
console.log("shouldn't be an empty object": data);
});
我发现您可以在禁用持久性后台脚本之前注册回调以运行的唯一方法是加载背景页面并使用窗口的卸载事件,代码用于测试:
{ "name": "停止持久后台脚本前的回调", "description": "停止持久性后台脚本前的回调", “版本”:“1.0”, “清单版本”:2, “权限”:[ “贮存” ], “背景”: { “页面”:“背景.html”, “持久”:真的 } }
背景.js
window.addEventListener('unload', function(event) { localStorage.setItem("已保存", "是"); }); console.log("已保存:", localStorage.getItem('已保存'));
背景.html
<html><body></body><script src="background.js"></script></html>
要对其进行测试,请尝试禁用并重新启用或重新加载扩展程序两次。
推荐阅读
- javascript - Mongoose/Express 中使用的日期字段未在 PUG 中显示
- java - 在源代码中使用 selenium 时如何从命令行编译 java 程序?
- oracle - 创建索引时出现异常“资源繁忙并获取指定的NOWAIT或超时过期”
- c++ - 可以找到Mingw
- php - php Redis::hscan 使用通配符名称和条件检索所有哈希
- amazon-web-services - 是否可以使用 AWS S3 托管 MVC 应用程序?
- javascript - 如何动态获取项目区域的uuid
- python-3.x - TypeError: 'str' 对象在 SQlite3 中存储数据时不可调用
- mysql - 仅使用邮递员 API 拒绝用户 'root'@'localhost' 的访问
- python - pytest - 将具有特定参数值的测试标记为 pytest.mark.skip