2013-04-08 9 views
9

मैंने अभी अपने क्रोम एक्सटेंशन को जेसन संस्करण 2 में अपडेट किया है, और मैं अपना एक्सटेंशन फिर से काम करने की कोशिश कर रहा हूं। समस्या भेज दी गई है अनुरोध के साथ अनुरोध की कमी थी। तो मैं अपनी स्क्रिप्ट में https://developer.chrome.com/extensions/messaging.html से कोड कॉपी करता हूं और इसे अपने स्वयं के परिवर्तनीय नामों में संशोधित करता हूं, और यह काम नहीं करता है।क्रोम एक्सटेंशन भेजें सामग्री स्क्रिप्ट से पृष्ठभूमि एचटीएमएल

तो फिर मैं वापस जाता हूं और मूल कोड डालता हूं और यह अभी भी काम नहीं करता है। मैंने कई प्रश्न पढ़े हैं जो समान हैं [और उम्मीद है कि यह डुप्लिकेट के रूप में बंद नहीं होगा, क्योंकि उनमें से कोई भी मेरी स्थिति के समान नहीं था]।

manifest.json:

{ 
    "background": { 
     "page": "background.html" 
     }, 
    ... ... ... 
    "content_scripts": [ { 
     "css": [ "style.css" ], 
     "js": [ "jq.js", "script.js" ], 
     "matches": [ "http://*.craigslist.org/*/*.htm*" ] 
    } ], 
    ... ... ... 
    "permissions": [ "tabs", "http://*.craigslist.org/*/*.htm*" ], 
    "manifest_version": 2, 
    "update_url": "http://clients2.google.com/service/update2/crx", 
    "version": "3.0" 
} 

background.html:

<html> 
<script type='text/javascript'> 
    chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    console.log(sender.tab ? 
       "from a content script:" + sender.tab.url : 
       "from the extension"); 
    if (request.greeting == "hello") 
     sendResponse({farewell: "goodbye"}); 
    }); 
    }); 
</script> 
</html> 

script.js:

chrome.runtime.sendMessage({greeting: "hello"}, function(response) { 
    console.log(response.farewell); 
}); 

अब मैं आरयू na पेज [craigslist पर], और Console पर जाएं और इस त्रुटि है:

Port error: Could not establish connection. Receiving end does not exist. 
TypeError: Cannot read property 'farewell' of undefined 
    at chrome-extension://dhmjefbokfkjpdbigkadjpgjeflchgea/script.js:9:23 

मैं उबंटू 12.10 पर Chrome बीटा का उपयोग 64-बिट (गूगल क्रोम: 27.0.1453.15 (आधिकारिक बिल्ड 191,758) बीटा)

+0

आप एक बाहरी फ़ाइल को इनलाइन कोड बढ़ने की जरूरत है। इस सवाल से पहले पूछा गया है, और एक विस्तृत उत्तर प्रदान किया गया है। –

+0

मैनिफेस्ट v1 से v2 तक क्रोम एक्सटेंशन बदलने के दौरान पोर्ट त्रुटि का संभावित डुप्लिकेट [http://stackoverflow.com/questions/11913575/port-error-while-changing-chrome-extension-from-manifest-v1-to- v2) –

उत्तर

30

आप अपनी पृष्ठभूमि और अपनी सामग्री स्क्रिप्ट दोनों से संदेश भेज रहे हैं, लेकिन उन्हें बिल्कुल प्राप्त करने की कोशिश नहीं कर रहे हैं। उन स्थानों में से एक या दोनों स्थानों में संदेशों को सुनने का प्रयास करें। इसके अलावा, इनलाइन कोड against the CSP है इसलिए इसे सभी को बाहरी फ़ाइल में ले जाएं।

उदाहरण के लिए:

manifest.json

"background": { 
    "scripts": ["background.js"] 
}, 

background.js

chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){ 
    sendResponse({farewell:"goodbye"}); 
}); 

script.js

chrome.runtime.sendMessage({greeting: "hello"}, function(response) { 
    console.log(response.farewell); 
}); 

इसके अलावा, chrome.tabs.getSelected() को भी बहिष्कृत कर दिया गया है, इसलिए इसके बजाय chrome.tabs.query() का उपयोग करें।

+0

ठीक है मैंने अभी अपना कोड पृष्ठभूमि.html और स्क्रिप्ट दोनों में संपादित किया है।जेएस, लेकिन मुझे अभी भी त्रुटि मिल जाएगी! – Matt

+0

मैं Google के कोड से बाहर जा रहा था। जबरदस्त हंसी। मैं सीधे इसके साथ जुड़ा हुआ है। वैसे भी नहीं, मुझे कोशिश करें ... दूसरे विचार पर मुझे यह भी यकीन नहीं है कि पृष्ठभूमि जेएस कैसे बनाना है। जब तक आप सामग्री-स्क्रिप्ट का मतलब नहीं लेते। मेरे पास पहले से ही है। समस्या, सामग्री-स्क्रिप्ट स्थानीय स्टोरेज तक नहीं पहुंच पा रहे हैं, इसलिए स्थानीय स्टोरेज तक पहुंचने के लिए पृष्ठभूमि HTML का उपयोग करके इसे एक संदेश में भेज दें। – Matt

+0

ओह .. ठीक है, मैं कोशिश करूँगा। – Matt

0

पृष्ठभूमि स्क्रिप्ट

chrome.tabs.getAllInWindow(null, function(tabs) { 
     $.each(tabs, function() { 
     chrome.tabs.sendRequest(this.id, {"action":"action_name"}); 
     }); 
    }); 

सामग्री स्क्रिप्ट

chrome.extension.onRequest.addListener(function(request, sender, sendResponse){ 
    if(request.action === 'action_name') 
    { 
    alert('handle event in the content script!!!!') 
    } 
}); 
+0

tabs.getAllInWindow के जवाब में त्रुटि: त्रुटि: तर्क के लिए अमान्य मान 1. मान 0 से कम नहीं होना चाहिए –

+0

@ ओलेक, आपका कोड बीजी से सामग्री को प्रतिलिपि के बजाय सामग्री भेज रहा है – Pacerier

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

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