WebExtensionsのgetBackgroundPageでバックグラウンドの関数を呼び出せない
FirefoxのWebExtensionsでgetBackgroundPageを使ってbackground script上の関数を呼び出そうとすると、Error: Permission denied to access property "f1"
というエラーが発生します
下記の例ではブラウザのポップアップにあるcheckboxがtrueの時だけ、10秒ごとにデータを取得しています。
何故、このようなエラーが起こるのでしょうか?
Edit: 最小限の・自己完結した・確認可能なサンプルコードに変更
Edit 2:
chrome54ではgetBackgroundPageを使って関数がうまく実行できているようです
もしかしてFirefoxのバグなのでしょうか?
background-page.js:
function f1() {
fetch("http://example.something.com/example").then((res) => {
res.text().then((text) => console.log(text));
});
}
function loop() {
f1();
if (getStorageValue("checked")) {
setTimeout(loop, 10000); // setTimeoutを使って10秒ごとにデータを取得
}
}
function getStorageValue(key) {
let retVal;
chrome.storage.local.get(key, (result) => {
retVal = result[key];
});
return retVal;
}
loop();
browser_action.js
let bgpage = chrome.extension.getBackgroundPage();
let checkbox = document.getElementById("checkbox"); // checkboxを取得
let status = document.getElementById("status");
chrome.storage.local.get("checked", (result) => {
checkbox.checked = result.checked || true; // storageに格納したcheckboxの値を反映させる
});
checkbox.onchange = (e) => {
chrome.storage.local.set({"checked": checkbox.checked}); // checkboxの状態をstorageに格納
if (checkbox.checked) {
status.textContent = "ON";
bgpage.loop(); // Error: Permission denied to access property "f1"
}
else {
status.textContent = "OFF";
}
}
default_popup.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<label class="switch">
<span id="status">OFF</span>
<input id="check" type="checkbox">
</label>
<script src="browser_action.js"></script>
</body>
</html>
manifest.json:
{
"manifest_version": 2,
"version": "1.0",
"name": "My Extension",
"background": {
"scripts": ["background-page.js"]
},
"permissions": [
"*://example.something.com/example/*",
"webRequest",
"alarms",
"notifications",
"storage"
],
"browser_action": {
"default_icon": {
"19": "icons/icon-19.png",
"38": "icons/icon-38.png"
},
"default_title": "my popup",
"default_popup": "popup/default_popup.html"
}
}