0

我想将一个变量"word"background.js发送到popup.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仅在我单击页面操作时才会触发,但随后什么也没有发生。

弹出.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>
4

1 回答 1

1

由于您想要的变量在后台页面中,并且仅在您打开它时才加载弹出窗口,因此您可以使用消息传递来执行此操作。在这种情况下,最好从弹出窗口向后台页面发送消息,如下所示:

popup.js

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

背景.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
  }
});

编辑:好的,所以我拿走了你的代码并编辑了一些,但最初的“有效!” 弹出窗口没有任何变化。这些将有助于防止将来出现问题。

清单.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"]
}],

我删除了重复的权限,您试图在该js部分中注入一个 css 文件。

背景.js

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

脚本.js

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

你有多个onMessage听众,我把他们结合起来。

通过这些更改,当单击页面操作时,会弹出第一个弹出窗口,然后是一个空的弹出窗口,因为 word 永远不会设置为任何内容。

于 2013-04-12T16:21:05.023 回答