1

あるタブから別のタブに値を渡そうとしています。

クリップボードを試しsessionStorageてみましたが、今のところ運がありません。これがデモとコードです。

https://builder.addons.mozilla.org/package/154290/latest/

選択したテキストを取得し、開いたタブに渡します。

// Create a new context menu item.
var menuItem = contextMenu.Item({
    label: "Check with Proofread Bot",
    context: contextMenu.SelectionContext(),
    contentScript: 'self.on("click", function () {' +
                '  var text = window.getSelection().toString();' +
                '  sessionStorage.setItem("proofread_bot_chrome", text);' +
                '  self.postMessage(text);' +
                        '});',
    onMessage: function(text) {
        clipboard.set(text);
        //sessionStorage.setItem("proofread_bot_chrome", text);
        tabs.open({
          url: "http://proofreadbot.com",
          onOpen: function onOpen(tab) {
            // do stuff like listen for content
            // loading.
            alert(clipboard.get());
            alert(selection.text);
            sessionStorage.setItem("proofread_bot_chrome", clipboard.get());
          }
        });
    }
});
4

2 に答える 2

1

sessionStoragelocalStorage常にドメインにバインドされています。コンテンツスクリプトは、Webページの特権で実行されます。つまり、コンテンツスクリプトは、そのWebページのセッションストレージにアクセスします。データを渡すのにあまり役立ちません。そして、彼らは単にクリップボードにアクセスできません。

これは、「従来の」メッセージングを回避できないことを意味します。タブを開いたら、コンテンツスクリプトを添付し、準備が整うのを待って(コンテンツスクリプトはそれを示すメッセージを送信できます)、テキストを送信します。このようなもの:

onOpen: function(tab) {
  var worker = tab.attach({
    contentScript: "self.on('message', function(text) {alert(text);});" +
                   "self.postMessage(null);",
    onMessage: function() {
      worker.postMessage(text);
    }
  });
}

参考:を使ったコミュニケーションpostMessage()

于 2012-09-28T05:27:45.193 に答える
0

sessionStorageの代わりにlocalStorageを試す必要があります。localStorageは、同じオリジンのドキュメント間で共有されます。タブを閉じても持続しますが、要件に応じて望ましい場合と望ましくない場合があります。

sessionStorageはドキュメントごとであるため、タブ間で共有されません。

于 2012-09-28T05:24:37.303 に答える