2013-05-01 41 views
10

Próbuję uzyskać prosty rozszerzenie Google Chrome pracuje, gdy wiadomość/zmienny przepływa przez każdy z następujących kroków ...Chrome Extension - Od DOM do wiadomości Popup.js przechodzącej

  1. zawartości DOM (od specyficznych znaczników HTML)
  2. Contentscript.js
  3. Background.js
  4. Popup.js
  5. Popup.html

Mam zorientowali się, jak wysłać wiadomość/zmienna do Background.js i z to w jednym kierunku (Background.js -> Popup.js lub Background.js -> Contentscript.js), ale nie może uzyskać go przez wszystkie trzy pomyślnie (Contentscript.js -> Background.js -> Popup.js). Oto pliki w mojej wersji demonstracyjnej.

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" 
    } 
] 

} 

Mam wrażenie, że wiedzą, co jest trip-up , ale dokumentacja jest poważnie brakuje dla manifest_version: 2, który jest trudny do odczytania. Prosty przykład wielokrotnego użytku byłby bardzo pomocny w procesie uczenia się, ponieważ jestem pewien, że jest to częsty problem.

Odpowiedz

16

W porządku, zmiana kilku rzeczy w kodzie powinna sprawić, że będzie działać tak, jak chcesz. Nie wszystkie zmiany, które zamierzam wprowadzić, są konieczne, ale tak właśnie mogę to zrobić.

zawartość Script

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

Tło

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

To jest dokładnie to, czego szukałem. Bardzo doceniane! –

+0

Próbowałem tego. wyskakujące okienko nic nie pokazuje.Zmieniłem wartość "fromDOM" na mojej stronie internetowej: –

+0

@Venky zadaj własne pytanie za pomocą kodu, a ja będę mógł ci pomóc lepiej. – BeardFist