2013-05-01 25 views
10

Sto cercando di ottenere una semplice estensione di Google Chrome di lavoro in cui un messaggio/variabile scorre attraverso ognuno dei seguenti passaggi ...Chrome Extension - Dal DOM al messaggio Popup.js passando

  1. contenuti DOM (da tag HTML specifico)
  2. Contentscript.js
  3. Background.js
  4. Popup.js
  5. Popup.html

Ho capito come per inviare un messaggio/variabile a Background.js e da in una direzione (Background.js -> Popup.js o Background.js -> Contentscript.js), ma non riesco a farlo attraverso tutti e tre con successo (Contentscript.js -> Background.js -> Popup.js). Ecco i file nella mia demo.

Dom

<h1 class="name">Joe Blow</h1>

Content.js

fromDOM = $('h1.name').text(); 

chrome.runtime.sendMessage({contentscript: "from: contentscript.js", title: fromDOM}, function(b) { 
    console.log('on: contentscript.js === ' + b.background); 
}); 

Background.js

chrome.tabs.getSelected(null, function(tab) { 
    chrome.extension.onMessage.addListener(function(msg, sender, sendResponse) { 

     sendResponse({background: "from: background.js"}); 
     console.log('on: background.js === ' + msg.title); 

    }); 
}); 

Popup.js

chrome.extension.sendMessage({pop: "from: popup.js"}, function(b){ 
    console.log('on: popup.js === ' + b.background); 

    $('.output').text(b.background); 
}); 

Popup.html

<html> 
<head> 
    <script src="jquery.js"></script> 
    <script src="popup.js"></script> 
</head> 
<body> 

<p class="output"></p> 

</body> 
</html> 

manifest.json

{ 
"name": "Hello World", 
"version": "1.0", 
"manifest_version": 2, 
"description": "My first Chrome extension.", 
"background" : { 
    "scripts": ["background.js"] 
}, 
"permissions": [ 
    "tabs" 
], 
"browser_action": {  
    "default_icon": "icon.png", 
    "default_popup": "popup.html" 
}, 
"content_scripts": [ 
    { 
     "matches": ["http://*/*"], 
     "js": ["jquery.js","contentscript.js"], 
     "run_at": "document_end" 
    } 
] 

} 

ho la sensazione so cosa il viaggio-up è , ma la documentazione è gravemente carente per manifest_version: 2 che è difficile da decifrare. Un esempio semplice e riutilizzabile sarebbe molto utile nel processo di apprendimento, in quanto sono sicuro che questo è un problema comune.

risposta

16

OK, cambiare alcune cose nel codice dovrebbe farlo funzionare come si desidera. Non tutti i cambiamenti che sto per fare sono necessari, ma questo è solo il modo in cui potrei farlo.

Content Script

var fromDOM = $('h1.name').text(); 
chrome.runtime.sendMessage({method:'setTitle',title:fromDOM}); 

Sfondo

var title; 
chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){ 
    if(message.method == 'setTitle') 
    title = message.title; 
    else if(message.method == 'getTitle') 
    sendResponse(title); 
}); 

Popup.js

chrome.runtime.sendMessage({method:'getTitle'}, function(response){ 
    $('.output').text(response); 
}); 
+0

Questo è esattamente quello che stavo cercando. Molto apprezzato! –

+0

Ho provato questo. il pop-up non mostra nulla.Ho cambiato il valore 'fromDOM' come per il mio sito web anche se –

+0

@Venky fai la tua domanda con il tuo codice e sarò in grado di aiutarti meglio. – BeardFist