How to pass a value between browser tabs?

一曲冷凌霜 提交于 2019-12-11 07:36:10

问题


I am trying to pass a value from one tab to another.

I tried sessionStorage and clipboard, but no luck so far. Here is the demo, and the code as well:

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

What it tries to do is get the selected text, and pass it to the opened tab:

// 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());
          }
        });
    }
});

回答1:


sessionStorage and localStorage are always bound to a domain. Content scripts run with the privileges of the web page meaning that they access the session storage for that web page - not very useful to pass data around. And they simply don't have clipboard access.

This means that you can't get around "traditional" messaging. When you open the tab you should attach a content script, wait for it to be ready (the content script can send a message to indicate that) and send it the text. Something like this:

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

For reference: Communicating using postMessage()




回答2:


You should try localStorage instead of sessionStorage. localStorage is shared between the documents from same origin. Although it persists even on tab close, which may or may not be desirable depending on your requirement.

sessionStorage is per document, and hence not shared between tabs.



来源:https://stackoverflow.com/questions/12618104/how-to-pass-a-value-between-browser-tabs

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!