私は WebExtension をまったく初めて使用します (Firefox で使用しようとしています)。私はブラウザアクションを書きました。永続的な状態を維持するには、バックグラウンド スクリプトを実装する必要があると考えました。
ブラウザ アクション スクリプトからバックグラウンド スクリプトで定義された変数にアクセスするにはどうすればよいですか?
それとも、バックグラウンド スクリプトにブラウザ アクションの状態を含めることができるという仮定は間違っていますか?
私は WebExtension をまったく初めて使用します (Firefox で使用しようとしています)。私はブラウザアクションを書きました。永続的な状態を維持するには、バックグラウンド スクリプトを実装する必要があると考えました。
ブラウザ アクション スクリプトからバックグラウンド スクリプトで定義された変数にアクセスするにはどうすればよいですか?
それとも、バックグラウンド スクリプトにブラウザ アクションの状態を含めることができるという仮定は間違っていますか?
はい、わかった。私は良いスタートをこことここで見つけました。
ブラウザ アクションとバックグラウンド スクリプトの間の通信にメッセージ投稿を使用しています。
ブラウザのアクション ポップアップで操作でき、ゲームの状態がバックグラウンド スクリプトにあるゲームを考えてみてください。以下は、バックグラウンド スクリプトからブラウザ アクションへのコイン数 (プレイヤーのお金) を取得する例です。
ブラウザアクション:
var _playerCoins = 0;
// I connect a 'port' with the name 'getCoins'.
var _port = chrome.runtime.connect({name: "getCoins"});
// This is the message that is called if the other side posts a message via the port.
// The background script puts the current amount of coins into the message
_port.onMessage.addListener(function(msg) {
// Save the number of coins in a local variable
_playerCoins = msg;
// Display number of coins on my browser action html page
document.getElementById("coins").innerHTML="Coins: " + _playerCoins;
});
バックグラウンド スクリプト:
// Add a listener for port connections
chrome.runtime.onConnect.addListener(function(port) {
// If there is a 'getCoins' connection coming in...
if(port.name == "getCoins") {
// ...add a listener that is called when the other side posts a message on the port.
port.onMessage.addListener(function(msg) {
port.postMessage(_playerCoins);
});
}
}