0

ブラウザ拡張機能内でバックグラウンドスクリプトとコンテンツスクリプトの間でオブジェクトを転送することは可能ですか?

バックグラウンドスクリプトでブラウザ内のストレージを処理したい。私のコンテンツスクリプトは、ユーザーの操作を追跡して保存する必要があります。したがって、ユーザーがインタラクションを記録し、同時にブラウザー拡張機能のUIを介してデータを管理する場合の同期の問題を回避するために、バックグラウンドスクリプトから「抽象」ストレージエンジンのインスタンスを取得するためにシングルトンパターンを使用することを計画しました。

私の最初の試みは次のようになります:

背景スクリプト

var StorageEngine, _StorageEngine;

StorageEngine = (function() {
  var _instance;
  function StorageEngine() {}
  _instance = null;
  StorageEngine.getInstance = function() {
    return _instance != null ? _instance : _instance = new _StorageEngine;
  };
  return StorageEngine;
})();

_StorageEngine = (function() {
  function _StorageEngine() {}
  _StorageEngine.prototype.sayMyName = function(message) {
    return 'hello ' + message;
  };
  return _StorageEngine;
})();

コンテンツスクリプト

(function() {
  kango.invokeAsync('StorageEngine.getInstance', function(val) {
    var asd;
    if (val) {
      debugger;
    }
    asd = val.sayMyName('Alice');
    return kango.console.log(asd);
  });
}).call(this);

val未定義ではありませんが、グーグルデバッガーが信頼できる場合はオブジェクトですが、関数sayMyNameは未定義です。

4

2 に答える 2

1

ブラウザの制限により、バックグラウンドからコンテンツスクリプトに関数を渡すことはできません。渡すことができるのは、JSONシリアル化可能なデータのみです。

次のようにストレージを使用してみてください。

// background script
var storage = StorageEngine.getInstance();

// content script
kango.invokeAsync('storage.sayMyName', 'Alice', function(val) {
    kango.console.log(val);
});
于 2013-01-19T04:45:40.807 に答える
1

Chrome拡張機能のコンテンツスクリプトはに存在します。isolated worldsつまり、DOMを共有しますが、個別のJavaScriptサンドボックスがあります。

したがって、kango.invokeAsync関数とすべての変数に到達できるわけではありませんcontent script。ページJSを利用する場合、変数と関数はここのようにコンテンツスクリプトを定義します。

var script = document.createElement('script'); // Create a Script Tag
script.src = chrome.extension.getURL("yourscript.js"); //Fetch the content script
script.onload = function () {
    this.parentNode.removeChild(this); //Remove script after script executed
};
(document.head || document.documentElement).appendChild(script); //ADD script tag 
                                                       //to head or Html element

コードには、コンテンツスクリプトとバックグラウンドページの間の通信メカニズムはありません。すべての機能要件に対応するメッセージ通信システムを追加します。

参照:

于 2013-01-04T17:30:42.803 に答える