2012-08-01 15 views
15

मैं क्रोम एक्सटेंशन में नया हूं। मैं सामग्री स्क्रिप्ट और पृष्ठभूमि.html पृष्ठ के बीच संवाद करने की कोशिश कर रहा हूं। background.html एक अनुरोध भेजता है, "हैलो", सामग्री स्क्रिप्ट और सामग्री स्क्रिप्ट के लिए "हैलो पृष्ठभूमि" अलर्ट के साथ प्रतिक्रिया देना चाहिए। लेकिन यह अभी नहीं हो रहा है। मेरे background.html कोड है:क्रोम एक्सटेंशन: सामग्री स्क्रिप्ट और background.html के बीच संचार

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

content.js कोड:

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

popup.html कोड:

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

कृपया मदद करें!

उत्तर

22

sendRequest/onRequest क्रोम 20. *Message में sendMessage/onMessage साथ बदल दिया है सिर्फ *Request के लिए उपनाम नहीं है, यह एक अलग एपीआई है।

यदि आप क्रोम < 20 का समर्थन करना चाहते हैं (कई उबंटू उपयोगकर्ता अभी भी क्रोमियम 18 पर हैं, क्योंकि पीपीए अपडेट नहीं किया गया है), onRequest और sendRequest का उपयोग करें। अन्यथा, *Message विधियों का उपयोग करें।


एक और समस्या यह है कि आपका फ़ंक्शन पृष्ठभूमि पृष्ठ में स्थित है, और कॉल पॉप-अप में किया गया है। ये अलग-अलग दायरों कर रहे हैं, अगर आप पॉपअप से एक पृष्ठभूमि पृष्ठ विधि कॉल करना चाहते हैं, chrome.extension.getBackgroundPage() का उपयोग करें:

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

अंतिम नोट: आप मेनिफेस्ट संस्करण 1 और इनलाइन ईवेंट हैंडलर्स का उपयोग कर रहे हैं। अधिक जानकारी के लिए, इस अभ्यास को बहिष्कृत किया गया है, http://code.google.com/chrome/extensions/manifestVersion.html देखें।

+0

बहुत रोब धन्यवाद! :) – Chandeep

+0

@ user975234 टेज ['मैसेजेज' पर प्रलेखन] (http://code.google.com/chrome/extensions/extension.html#event-onMessage) वास्तविक स्थिति से मेल नहीं खाता है। अधिक जानकारी के लिए, http://stackoverflow.com/a/11811936 देखें। –

संबंधित मुद्दे