Javascript 如何在chrome扩展中将参数从后台脚本传递到内容脚本?

Javascript 如何在chrome扩展中将参数从后台脚本传递到内容脚本?,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我有一个chrome扩展,它从后台脚本调用内容脚本,将HTML插入网页 当我调用内容脚本(inject.js)时,我想从内容脚本(eventpage.js)中传递一些参数,但在这样做时遇到了一些问题。我也不想使用利用chrome.storage或localstorage的解决方案 Manifest.json(相关部分): Eventpage.js(背景): Inject.js(内容): 您想要使用的解决方案有时很方便,但它不是内容脚本 它用于在页面上插入HTML的不同情况。 您正试图将一段JS直

我有一个chrome扩展,它从后台脚本调用内容脚本,将HTML插入网页

当我调用内容脚本(inject.js)时,我想从内容脚本(eventpage.js)中传递一些参数,但在这样做时遇到了一些问题。我也不想使用利用chrome.storage或localstorage的解决方案

Manifest.json(相关部分):

Eventpage.js(背景):

Inject.js(内容):


您想要使用的解决方案有时很方便,但它不是内容脚本 它用于在页面上插入HTML的不同情况。 您正试图将一段JS直接注入网站,而您将inject.JS文件指定为内容脚本

WebExtensions标准中的内容脚本意味着该脚本可以访问网页的HTML(除去一些限制,如iFrame),并可以对其进行修改

考虑将背景脚本的内容更改为:

chrome.tabs.query({active:true, lastFocusedWindow: true}, function(tabs){
    if (tabs.length > 0) {
        chrome.tabs.sendMessage(tabs[0].id, {
           type:"message-type",
           param: 'param'
         });
}});   
在内容脚本中,为从后台检索到的消息添加侦听器

chrome.extension.onMessage.addListener(callback);
其中,
callback
变量应该是要在inject.js文件中运行的函数。此函数可能会在其签名中获得一个参数,执行时,它包含作为
chrome.tabs.sendMessage
函数的第二个参数传递的JS对象

在这种情况下,它将是

 var callback = function(data) {
    // here in data.param you have your parameter
 }
此外,如果确实需要使用代码注入,则必须做两件事:

  • manifest.json
    的内容脚本部分删除
    inject.js
    ,并将其添加到
    web\u可访问的资源部分

  • 阅读有关注入代码的所有必要信息

  • 使用:

    Eventpage.js

    // Want to add the parameter here
    var parameterToSend;
    
    chrome.tabs.executeScript(tabId, {
        file: 'inject.js'
    }, function() {
        chrome.tabs.sendMessage(tabId, {parameter: parameterToSend});
    });
    
    (function() {
    
        // Want to retrieve the parameter passed from eventpage.js here
    
        chrome.runtime.onMessage.addListener(function(message) {
            var receivedParameter = message.parameter;
    
            //use receivedParameter as you wish.
    
        });
    
    })();
    
    Inject.js

    // Want to add the parameter here
    var parameterToSend;
    
    chrome.tabs.executeScript(tabId, {
        file: 'inject.js'
    }, function() {
        chrome.tabs.sendMessage(tabId, {parameter: parameterToSend});
    });
    
    (function() {
    
        // Want to retrieve the parameter passed from eventpage.js here
    
        chrome.runtime.onMessage.addListener(function(message) {
            var receivedParameter = message.parameter;
    
            //use receivedParameter as you wish.
    
        });
    
    })();
    
    (function() {
    
        // Want to retrieve the parameter passed from eventpage.js here
    
        chrome.runtime.onMessage.addListener(function(message) {
            var receivedParameter = message.parameter;
    
            //use receivedParameter as you wish.
    
        });
    
    })();