Chrome-Ext:如何将参数值从popup.js / background.js传递到内容脚本?

时间:2013-03-24 16:58:06

标签: google-chrome google-chrome-extension

我发现有很多帖子告诉我们如何使用sendRequest和OnRequest.addListener函数将值从内容脚本传递到后台脚本。

但是,我想将用户输入参数传递给内容脚本。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

根据您注入内容脚本的方式,您可以采用不同的方式。首先,如果您使用匹配模式并通过清单注入,并且您需要基于content script中某些事件的数据,那么您将需要执行以下操作:

内容脚本

chrome.extension.sendMessage({text:"getStuff"},function(reponse){
  //This is where the stuff you want from the background page will be
  if(reponse.stuff == "test")
    alert("Test received");
});

<强> Background.js

chrome.extension.onMessage.addListener(function(message,sender,sendResponse){
  if(message.text == "getStuff")
    sendResponse({stuff:"test"}); //This would be where you send your stuff
});

如果您正在进行程序化注射并且在注射时有数据,那么这样的事情就可以了。我假设您已经知道如何获取要注入的选项卡:

<强> Background.js

//given tab is the tab ID you already have
chrome.tabs.executeScript(tab,{file:"contentScript.js"},function(){
  chrome.tabs.sendMessage(tab, {stuff:"test"});
});

<强> contentScript.js

chrome.extension.onMessage.addListener(function(message,sender,sendResponse){
  //This is where the stuff you want from the background page will be
  if(message.stuff == "test")
    alert("Test received");
});

如果您需要将弹出窗口中的数据发送到已注入的内容脚本,那么您可以执行以下操作:

<强> Popup.js

chrome.tabs.query({active:true,currentWindow:true}, function(tab) {
  chrome.tabs.sendMessage(tab[0].id, {stuff:"test"});
});

<强> contentScript.js

chrome.extension.onMessage.addListener(function(message,sender,sendResponse){
  //This is where the stuff you want from the background page will be
  if(message.stuff == "test")
    alert("Test received");
});

只要您选择了所需的选项卡,无论您如何注入脚本,这都将有效。