2013-04-12 4 views
0

Я хочу послать переменную "word" из background.js в popup.js где он будет обработан в функции. Проблема в том, что я не могу отправить эту переменную и запустить popup.js в любом случае.Передача вар из background.js в popup.js

Я пробовал:

chrome.runtime.sendMessage({valoare: word},function atribut(word){}); with and without the function attached. 

И от того, что я слышал, я могу получить к нему доступ без запроса прямо из popup.js но ничего не работает под popup.js.

var selection = chrome.extension.getBackgroundPage().word; 
alert(selection); 

Я понимаю, что popup.js пожары только тогда, когда я нажимаю действие страницы, но ничего не происходит тогда.

Popup.html:

<html> 
<head> 
<script src='jquery-1.9.1.min.js'></script> 
<script src='jquery-ui.js'></script> 
<script type="text/javascript" src="jquery.googleSuggest.js"> 
<link class="jsbin" href="jquery-ui.css" rel="stylesheet" type="text/css" /> 
<link type="text/css" rel="stylesheet" href="suggest.min.css" /> 
<script src="popup.js"></script> 
<link rel="stylesheet" href="mystyle.css" type="text/css" /> 
<meta charset=utf-8 /> 
</head> 
<body> 
<div id="pop"> 
    <label for="term">Suggested term: </label> 
    <input id="term" style="display: none;"type="text" value=""/> 
</div> 
</body> 
</html> 
+0

Возможно, вам нужно использовать 'chrome.extension.getViews ({type: 'popup'})' from background.js. –

+0

Я использовал это без успеха или, по крайней мере, не знаю, какую форму он возвращает, если у меня есть что-то вроде: 'var popups = chrome.extension.getViews ({type: "popup"}); \t \t \t если (! Popups.length = 0) { \t \t \t \t вар Всплывающие = всплывающие окна [0]; \t \t \t \t popup.atribut (word); \t \t \t}; ' – Edeph

ответ

1

Поскольку переменная вы хотите в фоновом режиме страницы, и всплывающее окно загружается только когда вы открываете его, вы можете использовать message passing, чтобы сделать это. В этом случае было бы лучше, чтобы отправить сообщение из всплывающего окна на фоне страницы, как это:

popup.js

chrome.runtime.sendMessage({method:"getWord"},function(response){ 
    //here response will be the word you want 
    console.log(response); 
}); 

background.js

chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){ 
    if(message.method == "getWord"){ 
    //depending on how the word is stored you can do this in one of several ways 
    // 1. If it is a global variable, we can just return it directly 
    sendResponse(word); 
    // 2. It needs to be retrieved asynchronously, in that case we do this 
    getWord(sendResponse); 
    return true; 
    // This passes the ability to reply to the function where we get the info 
    // Once we have the info we can just use sendResponse(word); like before 
    } 
}); 

Редактировать : Хорошо, поэтому я взял ваш код и отредактировал его, но начальный «Works!» popup работал без каких-либо изменений. Это просто поможет предотвратить проблемы в будущем.

manifest.json

"permissions": [ 
    "tabs", "https://twitter.com/*" 
], 
"content_scripts": [{ 
    "matches": ["https://twitter.com/*"], 
    "js": ["jquery-1.9.1.min.js", "myscript.js"], 
    "css": ["mystyle.css" , "jquery-ui.css", "suggest.min.css"] 
}], 

Я удалил дубликата разрешения, и вы пытаетесь внедрить файл CSS в разделе js.

background.js

chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) { 
    if(msg.check) 
    word = msg.check; 
    if(msg.method == "getWord") 
    sendResponse(word); 
}); 

script.js

//get the word you want to send 
chrome.runtime.sendMessage({check: word}); 

У вас было несколько onMessage слушателей, я объединил их.

С этими изменениями при нажатии на действие страницы появляется первое всплывающее окно, за которым следует пустой, поскольку слово никогда не устанавливается ни на что.

+0

Спасибо, что просмотрели мой код, я исправил плохие детали, и он все еще ничего не делает ... Я не понимаю, в чем проблема, popup.js никогда не срабатывает. Мое предупреждение от background.js на самом деле работает очень хорошо:/Это странно? – Edeph

+0

'chrome.runtime.sendMessage ({check: word}, ​​function resp (word) {});' Это код, который я использую из myscript.js (textcript), и я отправляю слово на background.js с ним , Я думаю, что это плохо написано с учетом функции resp (word) {}. Как я могу использовать его правильно? – Edeph

+0

Что я могу сделать с этой функцией? – Edeph

Смежные вопросы