0

background.js"word"から関数で処理される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が起動することを理解していますが、その後は何も起こりません。

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>
4

1 に答える 1

1

必要な変数はバックグラウンド ページにあり、ポップアップは開いたときにのみ読み込まれるため、メッセージ パッシングを使用してこれを行うことができます。この場合、次のようにポップアップからバックグラウンド ページにメッセージを送信するのが最善です。

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!」ポップアップは変更なしで機能しました。これらは、将来の問題を防ぐのに役立ちます。

マニフェスト.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 ファイルを挿入しようとしていました。

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リスナーを持っていました。私はそれらを組み合わせました。

これらの変更により、ページ アクションをクリックすると、単語が何も設定されないため、最初のポップアップが表示され、その後に空のポップアップが表示されます。

于 2013-04-12T16:21:05.023 に答える