2016-01-11 18 views
0

我太新有关使Chrome扩展程序和出头发送变量,我会尝试:从“browser_action”到“content_scripts”

我会从“browser_action”到“content_scripts”


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

实施例:如果...

的src/browser_action/main.j S:(browser_action)

var MyVar = "Hello world"; 

以及如何发送MyVar的src /注射/ inject.js? Like ..

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

回答

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); 
    }); 
}); 

在接收端,则需要设置up一个chrome.runtime.onMessage事件监听器来处理消息

inject.js:

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

感谢。但是如何在不打开“browser_action”的情况下获得'message'?可能吗? – l2aelba

+1

使用后台脚本:https://developer.chrome.com/extensions/background_pages – Sid

0

chrome.storage#ref

例做到了:

添加 “存储” 权限上manifest.json的

"permissions": [ 
    "storage" 
] 

在main.js(browser_action)

chrome.storage.sync.set({'user':{email:'[email protected]'}}); 

在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); 
     } 
    }); 
}); 
相关问题