1

アドオンビルダーを使用してFirefoxアドオンを作成していますが、ページコンテンツから値を保存して、パネルコンテンツスクリプトから読み取りたいと考えています。localStorageを使用したいのですが、試しましたが、ページとパネルスクリプト間で同じlocalStorageを共有できません。また、self.port.emitを試してみましたが、このメソッドは完全に機能しています。port.emitとport.onを使用して値を送信できますが、この値を毎秒更新する必要があるため、これは必要ありません。そのメソッドを使用すると、ブラウザがポートリクエストで過負荷になります。そのため、localStorageなど、変数に保存してパネルスクリプトから簡単にアクセスできるものを使用したいと思います。

ここでは、ページスクリプトで保存された値を読み取るパネルスクリプトを添付しています。

var panel = require("panel").Panel({
          width: 100,
          height: 100,
          contentScriptFile: data.url("panel_script.js")
    });

ここでは、ページコンテンツから値を保存し、パネルスクリプトがそれを読み取るページスクリプトを添付しています。

var pageMod = require("page-mod");
pageMod.PageMod({
    include: "*",
    contentScriptFile: self.data.url("page_script.js"),
    contentScriptWhen: 'ready'
  });
4

1 に答える 1

3

このportシステムは、パネルページを操作するための推奨ルートだと思います。localStorageただし、Firefoxアドオンを介してページにアクセスするという投稿した問題を解決する方法は次のとおりです。

var chrome = require('chrome');
var data = require('sdk/self').data;

var ios = chrome.Cc["@mozilla.org/network/io-service;1"]
                .getService(chrome.Ci.nsIIOService);
var ssm = chrome.Cc["@mozilla.org/scriptsecuritymanager;1"]
                .getService(chrome.Ci.nsIScriptSecurityManager);
var dsm = chrome.Cc["@mozilla.org/dom/storagemanager;1"]
                .getService(chrome.Ci.nsIDOMStorageManager);

var uri = ios.newURI(data.url('index.html'), "", null);
var principal = ssm.getCodebasePrincipal(uri);
var storage = dsm.getLocalStorageForPrincipal(principal, data.url('index.html'));

これにより、通常のWebページの場合と同じようにlocalStorage、オブジェクトを使用してページにアクセスできるようになります。storagestorage.setItem('key', 'value')storage.getItem('key')

于 2013-03-25T17:03:29.627 に答える