私が構築したクロム拡張機能があり、メモリリークが発生します。私はメモリ リークの修正に取り組んでいますが、その間に数人の友人が既に使用しています。
一時的な手段として、定期的に拡張機能を自動的に再起動するパッチを含めたいと思います。
これを行う方法、つまり、拡張機能自体からクロム拡張機能を再起動します。
ありがとう、
私が構築したクロム拡張機能があり、メモリリークが発生します。私はメモリ リークの修正に取り組んでいますが、その間に数人の友人が既に使用しています。
一時的な手段として、定期的に拡張機能を自動的に再起動するパッチを含めたいと思います。
これを行う方法、つまり、拡張機能自体からクロム拡張機能を再起動します。
ありがとう、
拡張機能を 2 つ使用できます。そして、他の拡張機能から対象の拡張機能を再起動します。それがあなたに合っているなら、読み進めてください。
window.addEventListener('load', function (e) {
// create a button and add it to the page
var btn = document.createElement('button');
btn.innerHTML = 'Restart child extension';
btn.addEventListener('click', function (e) {
// on button click send message to the background script
chrome.extension.sendMessage({restart: true}, function (res) {
console.log(res);
});
}, false);
var body = document.querySelector('body');
body.appendChild(btn);
}, false);
// first get your target (child) extension by it's name
var child = null;
chrome.management.getAll(function (info) {
for (var i=0; i < info.length; i++) {
if (info[i].name == 'Test child extension') {
child = info[i];
break;
}
}
});
function disable (cb) {
chrome.management.setEnabled(child.id, false, cb);
}
function enable (cb) {
chrome.management.setEnabled(child.id, true, cb);
}
function afterEnable () {
// notify the content script
resRestart({restarted: true});
}
var resRestart = null;
chrome.extension.onMessage.addListener(function (request, sender, sendResponse) {
console.log(request);
// if we receive request with restart variable, save a reference to the
// sendResponse function and disable the child extension
switch (true) {
case request.restart: resRestart = sendResponse; disable(); break;
}
return true;
});
chrome.management.onDisabled.addListener(function (extension) {
// this one is fired when extension is restarted
// check if this is our child extension and re-enable it
if (extension.name == 'Test child extension') {
enable(afterEnable);
}
});
{
"manifest_version": 2,
"name" : "Test parent extension",
"version" : "1.0",
"description" : "Whatever",
"background" : {
"scripts": [
"background.js"
]
},
"content_scripts": [
{
"matches": [
"*://localhost/*"
],
"js": [
"content.js"
],
"run_at": "document_end",
"all_frames": true
}
],
"permissions": [
"tabs",
"management",
"*://localhost/*"
]
}
{
"manifest_version": 2,
"name" : "Test child extension",
"version" : "1.0",
"description" : "Whatever",
"content_scripts": [
{
"matches": [
"*://localhost/*"
],
"css": [
"style.css"
],
"run_at": "document_end",
"all_frames": true
}
]
}
.
├── background.js
├── child
│ ├── manifest.json
│ └── style.css
├── content.js
└── manifest.json
今開いてabout:extensions
、http://localhost
分割画面で。ボタンをクリックして、子拡張機能が毎回どのように更新されるかを確認します。また、コンソールをチェックアウトすることもできます。内部から子拡張機能を無効にしようabout:extensions
としても、親拡張機能が実行されている限り不可能です。