2012-08-01 17 views
15

Chrome uzantıları için yeni. İçerik komut dosyasıyla background.html sayfası arasında iletişim kurmaya çalışıyorum. background.html İçerik komut ve sırt "merhaba arka plan" uyarı ile yanıt vermelidir İçerik komut için bir istek, "merhaba", gönderir. Ama bu olmuyor. Benim background.html kodudur:Chrome uzantısı: İçerik komut dosyası ile background.html arasındaki iletişim

function testRequest() {   
    chrome.tabs.getSelected(null, function(tab) { 
     chrome.tabs.sendRequest(tab.id, {greeting: "hello"}); 
    });  
} 

content.js kodu:

chrome.extension.onMessage.addListener(
    function(request, sender, sendResponse) { 
     if (request.greeting == "hello") 
     alert("hello background"); 
    } 
); 

popup.html kodu:

<!doctype html> 
<html> 
    <head></head> 
    <body> 
     <form> 
      <input type="button" value="sendMessage" onclick="testRequest()" /> 
     </form>  
    </body> 
</html> 

manifest.json:

{ 
    "browser_action": { 
     "default_icon": "icon.png", 
     "popup": "popup.html" 
    }, 
    "background": { 
     "page": "background.html" 
    }, 
    "permissions": [ 
     "tabs", 
     "http://*/*", 
     "https://*/*", 
     "notifications", 
     "contextMenus" 
    ], 
    "content_scripts": [ 
     { 
      "matches": ["http://*/*","https://*/*"], 
      "js": ["content.js"] 
     } 
    ], 
    "name": "FirstExtension", 
    "version": "1.0" 
} 

Lütfen yardım edin!

cevap

22

sendRequest/onRequest Chrome 20. *Message yılında sendMessage/onMessage değiştirilir *Request için sadece bir takma değil, farklı bir API var.

sen (PPA güncelleştirilmemesi nedeniyle, birçok Ubuntu kullanıcıları Krom 18 hl), 20 Chrome'u < desteklemek onRequest ve sendRequest kullanmak istiyorsanız

. Aksi halde, *Message yöntemlerini kullanın.


başka sorun da fonksiyon arka plan sayfasında yer aldığını ve çağrı pop-up yapılır. açılan pencereden bir arka plan sayfası yöntemini aramak istiyorsanız Bunlar, farklı kapsam vardır chrome.extension.getBackgroundPage() kullanın:

chrome.extension.getBackgroundPage().testRequest(); 

Final notu: manifest'ini versiyon 1 ve satır içi olay işleyicileri kullanıyoruz. Bu uygulama, daha fazla bilgi için, kullanımdan kaldırılmıştır, bkz. http://code.google.com/chrome/extensions/manifestVersion.html.

+0

çok teşekkürler Rob! :) – Chandeep

+0

@ user975234 Tge [onMessage' belgesindeki belgeler] (http://code.google.com/chrome/extensions/extension.html#event-onMessage) bu arada gerçek durumla eşleşmiyor. Daha fazla bilgi için, bkz. Http://stackoverflow.com/a/11811936. –

İlgili konular