我发现有很多帖子告诉我们如何使用sendRequest和OnRequest.addListener
函数将值从内容脚本传递到后台脚本。
但是,我想将用户输入参数传递给内容脚本。我怎样才能做到这一点?
答案 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");
});
只要您选择了所需的选项卡,无论您如何注入脚本,这都将有效。