2017-01-31 16 views
0

私は映画の名前を入力すると批評家/視聴者のスコアが表示されるRotten Tomatoes拡張機能を作成しています。今、私は、開いたムービータブのDOMを操作するために、コンテンツスクリプトと通信するバックグラウンドスクリプトを取得しようとしています。ちょっとした問題があります:コンテンツjsは、アクティブなタブでメッセージセットを聞いているときにのみ画面に印刷できます。Chrome拡張機能:非アクティブなタブでコンテンツスクリプトを有効にする方法

編集:私が上に書いたことを明確にするために、私は非アクティブなタブからデータを削り取ろうとしています。これまでは、script.jsにアクティブなタブで応答することしかできませんでした。私は、クロムAPIを使ってページを掻き集めるためにタブで開く必要があると推論しました。しかし、私は開かれたタブがユーザのウェブサーフィンを中断することを望まないので、非アクティブなタブです。誰かがこれをやり遂げるためのより簡単な方法を持っているなら、私はすべての耳です。

background.js(これは動作します)

chrome.runtime.onMessage.addListener(
    function(request,sender,sendResponse){ 
     if(request.message==="clicked_browser_action"){ 

      chrome.tabs.query({"active":true, "currentWindow":true},function(tabs){ 
       console.log(tabs) 
       var activeTab = tabs[0]; 
       console.log(activeTab) 
       chrome.tabs.sendMessage(activeTab.id, {"message":"message2Tab"}) 
      }) 
     } 
    }) 

ではなく、この:

chrome.runtime.onMessage.addListener(
    function(request,sender,sendResponse){ 
     if(request.message==="clicked_browser_action"){ 

      chrome.tabs.query({"currentWindow":true},function(tabs){ 
       var activeTab = tabs[tabs.length-1]; //find last tab 
       console.log(activeTab) 
       chrome.tabs.sendMessage(activeTab.id, {"message":"message2Tab"}) 
      }) 
     } 
    }) 

content.js:

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    console.log('started') 
    if(request.message === "message2Tab") { 
    console.log('started') 

    } 
    } 
); 

popup.html

<!DOCTYPE html> 
<script src="jquery-3.1.1.min.js"></script> 
<script src="popup.js"></script> 
Search RT for Movie: <input type="text" value=""><input type="submit" id="rt"> 
</div> 

manifest.jsonを

{ 
    "manifest_version":2, 
    "name":"extension", 
    "version":"0.1", 
    "content_scripts":[ 
     { 
      "matches": [ 
       "<all_urls>" 
      ], 
      "js":["content.js"] 
     }], 
    "browser_action":{ 
       "default_icon":"icon.png", 
       "default_popup":"popup.html" 
      } 
     , 
    "background":{ 
     "scripts":["background.js"] 
    }, 
    "permissions":[ 
     "tabs" 
    ] 

} 

私はearlier SO questionに完全なコードを掲載しました。あなたの助けのための多くのおかげで、これまで

+0

私は確認する必要がありませんコンソールの出力、私はそのページからテキストを取得したいだけです – st4rgut

+0

質問をon-topicにしてください:** complete ** [mcve]を含めると問題が*重複します。 * manifest.json *、背景/コンテンツ/ポップアップスクリプト/ HTMLの一部を含みます。 (「?取り組んこのコードではありませんなぜ** **」)のデバッグ助けを求める質問が含まれている必要があります問題の►the望ましい動作、►a特定の問題やエラー*と*それを再現するために必要な►the最短コード**を自体**。明確な問題文がない質問は、他の読者にとって有用ではありません。参照してください: "**どのように[mcve] **を作成するか"、[ここで私はどんな話題を聞くことができますか?](http://stackoverflow.com/help/on-topic)、[ask] – Makyen

+0

OK – st4rgut

答えて

0

私は、タブ間の通信にクロムストレージを使用:

content.js

chrome.storage.local.set({"keyName": [critics,audience,title]},function(){console.log('mah critics stored')}); 

popup.js

chrome.storage.local.get("keyName",function(items) { 
     console.log(items) 
     console.log(items.keyName) 
     var criticsscore = items.keyName[0] 
     var audiencescore = items.keyName[1] 
     $('#criticsscore').html('Critics ' + criticsscore) 
     $('#audiencescore').html('Audience ' + audiencescore) 
     $('#title').html(items.keyName[2]) 
    // Do something with items.keyName 
}); 
});  

    chrome.storage.local.get("keyName",function(items) {//initialize the application 
     console.log(items) 
     console.log(items.keyName) 
     var critics = items.keyName[0] 
     var people = items.keyName[1] 
     $('#criticsscore').html('Critics ' + critics) 
     $('#audiencescore').html('Audience ' + people) 
     $('#title').html(items.keyName[2]) 

    // Do something with items.keyName 
}); 
関連する問題