Send variables from "browser_action" to "cont

Send variables from "browser_action" to "content_scripts"

本文关键字:quot action to cont browser variables Send from      更新时间:2023-09-26

我对Chrome扩展很陌生,我会尝试一下:

我将把JS变量从"browser_action"发送到"content_scripts"


"browser_action": {
    "default_popup": "src/browser_action/index.html"
},
"content_scripts": [
   {
      "matches": ["<all_urls>"],
      "js": ["src/inject/inject.js"]
   }
]

示例:如果…

src/browser_action/main.js:(browser_action)

var MyVar = "Hello world";

以及如何将MyVar发送到src/inject/inject.js?喜欢

// What function I should do before to alert()?
if (typeof MyVar !== 'undefined') {
   alert(MyVar);
}

如果你想从后台向内容脚本发送消息(或数据),你可以使用chrome.tables.sendMessage()。但你需要指定发送到哪个选项卡(使用tabId)。你应该阅读扩展中的消息传递。

示例:

向所选选项卡中的内容脚本发送消息

main.js

chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
  chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
    console.log(response.farewell);
  });
});

在接收端,您需要设置一个chrome.runtime.oMessage事件侦听器来处理消息

inject.js:

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    if (request.greeting == "hello")
      sendResponse({farewell: "goodbye"});
  });

我用chrome.storage#ref 做的

示例:

manifest.json上添加"存储"权限

"permissions": [
   "storage"
]

在main.js上(browser_action)

chrome.storage.sync.set({'user':{email:'hello@world.com'}});

注入.js时(content_scripts)

chrome.storage.onChanged.addListener(function(c,a){
   chrome.storage.sync.get('user',function(o){
      if(!$.isEmptyObject(o)){ // Check via jQuery function
          // Do somethings...
          console.log(o.user.email);
      }
   });
});