从" browser_action"发送变量to" content_scripts"

时间:2016-01-11 08:38:20

标签: javascript google-chrome-extension

关于制作Chrome扩展程序和我会尝试的事情我是如此新颖:

我将从" browser_action"发送JS变量to" 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);
}

2 个答案:

答案 0 :(得分:2)

如果要将消息(或数据)从后台发送到内容脚本,可以使用chrome.tabs.sendMessage()。但是您需要指定将哪个选项卡(使用tabId)发送给它。你应该阅读message passing in extensions

示例:

向所选标签中的内容脚本发送消息

<强> 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.onMessage事件监听器来处理消息

<强> inject.js:

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

答案 1 :(得分:0)

我是通过chrome.storage #ref

完成的

示例:

manifest.json

上添加“存储”权限
"permissions": [
   "storage"
]

在main.js上 (browser_action)

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

关于inject.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);
      }
   });
});