我正在尝试将值从一个标签传递到另一个标签。
我尝试了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());
}
});
}
});
答案 0 :(得分:1)
sessionStorage
和localStorage
始终绑定到域。内容脚本使用网页的特权运行,这意味着它们访问该网页的会话存储 - 对于传递数据并不是非常有用。他们根本没有剪贴板权限。
这意味着您无法绕过“传统”消息传递。当您打开选项卡时,您应该附加一个内容脚本,等待它准备就绪(内容脚本可以发送一条消息来指示)并向其发送文本。像这样:
onOpen: function(tab) {
var worker = tab.attach({
contentScript: "self.on('message', function(text) {alert(text);});" +
"self.postMessage(null);",
onMessage: function() {
worker.postMessage(text);
}
});
}
答案 1 :(得分:0)
您应该尝试使用localStorage而不是sessionStorage。 localStorage在同一来源的文档之间共享。 虽然它甚至在关闭标签时仍然存在,根据您的要求,这可能是也可能不是。
sessionStorage是每个文档,因此不在标签之间共享。