2014-11-23 75 views
1

我正在开发一个简单的扩展,但我无法弄清楚如何继续前进。我想这是一个'简单'的问题。Chrome扩展程序,在标签页之间发送数据

场景:

  • 用户选择的文本
  • 打开上下文菜单,然后按下扩展
  • 一个新标签页打开
  • 填写一个文本瓦特/选择/高亮文本

我做了前三项,第四项我尝试了chrome.tabs.query/executeScript/messaging,ajax post ... 没有成功。

function sendReport() { 
    return function(info, tab) { 
     var selectedText = info.selectionText; 
     var cr_url = 'http://localhost/cr/index.php'; 
     var tab = chrome.tabs.create({ url: cr_url }, function(tab){ 

     }); 
    } 
} 

var OgameToConverter = chrome.contextMenus.create({ 
    "title": "Enviar Relatório", 
    "contexts": ["selection"], 
    "onclick": sendReport() 
}); 

回答

1

您可以通过使用chrome.runtime.sendMessagechrome.tabs.sendMessage发送选项卡之间的消息。要接收消息,请使用chrome.runtime.onMessage.addListener方法在接收选项卡上添加消息的侦听器。

例子:

chrome.tabs.create({ url: cr_url }, function(tab){ 
    chrome.tabs.sendMessage(tab.id, {greeting: "hello"}), function(){}); 
}); 

在标签:

chrome.runtime.onMessage.addListener(
    function(message, sender, sendResponse) { 
    // do what you want to the message 
}); 

或者,您可以用window.open创建窗口,与window.postMessage发送消息,并通过捕捉Message事件东西收到消息像window.addEventListener("message", ...);

+0

我不知道。也许我是用错误的方式来构建它的...... 我有第1页 - http://example.com,当我突出显示一个文本并在上下文菜单上点击扩展项时,它会打开第2页 - http ://stuff.org(不同的网站),并用选定的文本填充一个textarea 所以当你说'在标签中',你的意思是? – 2014-11-23 04:17:16

+0

我的意思是这段代码将运行在你想要通过文本的标签上。 – 0xcaff 2014-11-23 05:18:52

+0

@ 0xcaff只是一点点更新。需要删除'{greeting:“hello”}'后的额外括号。我无法编辑您的答案,因为StackOverflow预计至少需要6个字符的编辑变化! – 2017-11-10 06:41:37