2012-12-02 9 views
6

मैं क्रोम एक्सटेंशन पर नौसिखिया हूं, और निश्चित रूप से मैं हर कदम पर फंस गया हूं, लेकिन यह विशेष रूप से कठिन है। शायद यह एक मूर्खतापूर्ण गलती है, लेकिन यहां मैं जो करने की कोशिश कर रहा हूं:क्रोम एक्सटेंशन ऑनमेसेज

सामग्री स्क्रिप्ट से पृष्ठभूमि पृष्ठ पर एक साधारण संदेश भेजें और इसे एक चर के रूप में संभाल लें। तो क्या मैं अपनी सामग्री स्क्रिप्ट में इस है:

$(document).ready(function() { 
    var d = document.domain;  
     chrome.extension.sendMessage({dom: d}); 

}); 

और मेरी पृष्ठभूमि स्क्रिप्ट इस में:

chrome.extension.onMessage.addListener(function(request) { 
    alert(request.dom); 
}); 

तो, चेतावनी ठीक काम करता है। लेकिन यह उस पृष्ठ पर "जाता है" जो मैं बह रहा हूं और HTML एक्सटेंशन नहीं, इसका मतलब है, मेरे एक्सटेंशन बटन पर क्लिक करते समय पॉप अप करने की बजाय, यह दिखाई देगा क्योंकि पेज लोड होने पर सामग्री स्क्रिप्ट में कोड किया गया था।

कृपया, किसी भी मदद की सराहना की जाएगी।

+0

मुझे यकीन नहीं है कि आप क्या उम्मीद कर रहे हैं, लेकिन उस पृष्ठ पर 'लेकिन यह "जाता है" पृष्ठ पर मैं बह रहा हूं और HTML एक्सटेंशन नहीं, इसका मतलब है , मेरे एक्सटेंशन बटन पर क्लिक करते समय पॉप अप करने की बजाय, यह दिखाई देगा क्योंकि पृष्ठ लोड होने पर सामग्री स्क्रिप्ट में कोड किया गया था। मुझे लगता है कि आप विस्तार बटन पर क्लिक करने के बाद ही चेतावनी() की अपेक्षा कर रहे हैं? यदि यह सत्य है, तो आप गलत हो रहे हैं, क्योंकि आपने ब्राउज़र स्क्रिप्ट में पृष्ठभूमि स्क्रिप्ट पर श्रोता जोड़ा नहीं है और यह व्यवहार की उम्मीद है, यदि आप अपने सभी संबंधित कोड और उम्मीदों को स्पष्ट रूप से पोस्ट कर सकते हैं तो यह बहुत अच्छा होगा, इसलिए हम आपकी मदद कर सकते हैं । – Sudarshan

+0

प्रतिक्रिया के लिए धन्यवाद। असल में जो मैं करने की कोशिश कर रहा हूं वह बस सामग्री स्क्रिप्ट से पृष्ठभूमि स्क्रिप्ट तक एक मान पास करता है। फिर इसे एक चर के लिए असाइन करें और इसे (पृष्ठभूमि स्क्रिप्ट में) संभाल लें, फिर मेरे एक्सटेंशन आइकन पर क्लिक करते समय उस मान को पॉपअप में दिखाएं। मैंने जो कोड पहले पोस्ट किया है वह मूल रूप से मैंने जो किया है वह सब कुछ है। मैं इसे ब्राउज़र क्रिया में कैसे जोड़ सकता हूं? बस: आप क्या करेंगे जो मैं करने की कोशिश कर रहा हूं? अग्रिम धन्यवाद। – user1869935

उत्तर

15

मेरे डेमो विस्तार के रूप में) manifest.json(Documentation)

ख) myscript.js (सामग्री स्क्रिप्ट देखें Documentation)

फ़ाइलें & भूमिकाओं

इस प्रकार है

सी) background.js (पृष्ठभूमि HTML फ़ाइल देखें Documentation)

घ) popup.html (ब्राउज़र कार्य पॉपअप देखें Documentation)

ई) popup.js (पृष्ठभूमि पृष्ठ से संशोधित मूल्य के रिसेप्टर)

manifest.json

मा को सभी फाइलों को पंजीकृत nifest अनुमति के साथ (अर्थात पृष्ठभूमि, पॉपअप, सामग्री स्क्रिप्ट)

{ 
"name":"Communication Demo", 
"description":"This demonstrates modes of communication", 
"manifest_version":2, 
"version":"1", 
"permissions":["<all_urls>"], 
"background":{ 
    "scripts":["background.js"] 
}, 
"content_scripts": [ 
    { 
     "matches": ["<all_urls>"], 
     "js": ["myscript.js"] 
    } 
    ], 
"browser_action":{ 
    "default_icon":"screen.png", 
    "default_popup":"popup.html" 
} 
} 

myscript.js

var d = document.domain; 
chrome.extension.sendMessage({ 
    dom: d 
}); 

background.js पृष्ठभूमि पृष्ठ के साथ संवाद स्थापित करने के लिए प्रयोग किया जाता है sendMessage() API

सामग्री के लिए जोड़ा गया घटना श्रोता और popup.js onMessage() और onConnect() श्रोताओं

var modifiedDom; 
chrome.extension.onMessage.addListener(function (request) { 
    modifiedDom = request.dom + "Trivial Info Appending"; 
}); 
chrome.extension.onConnect.addListener(function (port) { 
    port.onMessage.addListener(function (message) { 
     if (message == "Request Modified Value") { 
      port.postMessage(modifiedDom); 
     } 
    }); 
}); 

पॉपअप के प्रयोग से।एचटीएमएल

नमूना ब्राउज़र कार्य HTML पेज popup.js दर्ज की Inline Scripting

<!doctype html> 
<html> 

    <head> 
     <script src="popup.js"></script> 
    </head> 

    <body></body> 

</html> 

popup.js

प्राप्त करने में कठिनाई परिणामों के लिए पृष्ठभूमि पृष्ठ के साथ संवाद स्थापित करने के लिए Port\Long Lived Connection प्रयुक्त से बचने के लिए

var port = chrome.extension.connect({ 
    name: "Sample Communication" 
}); 
port.postMessage("Request Modified Value"); 
port.onMessage.addListener(function (msg) { 
    console.log("Modified Value recieved is " + msg); 
}); 

उम्मीद है कि इससे मदद मिलती है, अगर आपको अधिक जानकारी की आवश्यकता है तो

+0

यह सोने, आदमी है। मैं इस पर गहराई से नजर डालने जा रहा हूं और देख सकता हूं कि मैं इसे सही तरीके से समझ सकता हूं या नहीं। मुझे यकीन है कि मुझे यही चाहिए। अगर मुझे अभी भी संदेह है तो मैं आपको बता दूंगा। आपका बहुत बहुत धन्यवाद! – user1869935

+2

** महत्वपूर्ण नोट **, 'chrome.extension' से मैसेजिंग फ़ंक्शंस को बहिष्कृत कर दिया गया है। 'Chrome.runtime' समकक्षों का प्रयोग करें। – Xan

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