एक्सटेंशन और ऐप्लिकेशन, इससे मिलते-जुलते एपीआई का इस्तेमाल करके, स्थानीय ऐप्लिकेशन के साथ मैसेज भेज सकते हैं मैसेज पास करने वाले दूसरे एपीआई. इस सुविधा का समर्थन करने वाले स्थानीय ऐप्लिकेशन को नेटिव मैसेजिंग होस्ट, जिसे एक्सटेंशन से संपर्क करने का तरीका पता हो. Chrome, होस्ट को इतनी देर बाद शुरू करता है एक अलग प्रोसेस है और स्टैंडर्ड इनपुट और स्टैंडर्ड आउटपुट स्ट्रीम का इस्तेमाल करके इससे जुड़ी जानकारी शेयर करती है.
नेटिव मैसेजिंग होस्ट
नेटिव मैसेजिंग होस्ट को रजिस्टर करने के लिए, ऐप्लिकेशन को ऐसी मेनिफ़ेस्ट फ़ाइल इंस्टॉल करनी होगी जो नेटिव मैसेजिंग होस्ट कॉन्फ़िगरेशन के बारे में बताता है. नीचे मेनिफ़ेस्ट फ़ाइल का एक उदाहरण दिया गया है:
{
"name": "com.my_company.my_application",
"description": "My Application",
"path": "C:\\Program Files\\My Application\\chrome_native_messaging_host.exe",
"type": "stdio",
"allowed_origins": [
"chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"
]
}
नेटिव मैसेजिंग होस्ट की मेनिफ़ेस्ट फ़ाइल, मान्य JSON फ़ॉर्मैट में होनी चाहिए. साथ ही, इसमें ये फ़ील्ड शामिल होने चाहिए:
नाम | ब्यौरा |
---|---|
name | नेटिव मैसेजिंग होस्ट का नाम. क्लाइंट इस स्ट्रिंग को runtime.connectNative या runtime.sendNativeMessage पर पास करते हैं. इस नाम में सिर्फ़ अंग्रेज़ी के छोटे अक्षर, अक्षर और अंक, अंडरस्कोर, और बिंदु हो सकते हैं. नाम, बिंदु से शुरू या खत्म नहीं हो सकता. साथ ही, एक बिंदु के बाद दूसरा बिंदु नहीं हो सकता. |
description | ऐप्लिकेशन के बारे में कम शब्दों में जानकारी. |
path | नेटिव मैसेजिंग होस्ट बाइनरी का पाथ. Linux और OSX पर पाथ बिलकुल सटीक होना चाहिए. Windows पर यह उस डायरेक्ट्री के हिसाब से हो सकता है जिसमें मेनिफ़ेस्ट फ़ाइल मौजूद है. होस्ट की प्रोसेस शुरू होती है, तो मौजूदा डायरेक्ट्री को उस डायरेक्ट्री पर सेट किया जाता है जिसमें होस्ट बाइनरी होती है. उदाहरण के लिए, अगर इस पैरामीटर को C:\Application\nm_host.exe पर सेट किया जाता है, तो इसे मौजूदा डायरेक्ट्री C:\Application\ से शुरू किया जाएगा. |
type | नेटिव मैसेजिंग होस्ट से संपर्क करने के लिए इस्तेमाल किए जाने वाले इंटरफ़ेस का टाइप. फ़िलहाल, इस पैरामीटर के लिए सिर्फ़ एक संभावित वैल्यू है: stdio . इससे पता चलता है कि होस्ट से संपर्क करने के लिए, Chrome को stdin और stdout का इस्तेमाल करना चाहिए. |
allowed_origins | ऐसे एक्सटेंशन की सूची जिनके पास नेटिव मैसेजिंग होस्ट का ऐक्सेस होना चाहिए. chrome-extension://*/* जैसे वाइल्डकार्ड का इस्तेमाल करने की अनुमति नहीं है. |
नेटिव मैसेजिंग होस्ट की जगह
मेनिफ़ेस्ट फ़ाइल की जगह की जानकारी प्लैटफ़ॉर्म के हिसाब से तय होती है.
Windows पर, मेनिफ़ेस्ट फ़ाइल, फ़ाइल सिस्टम में कहीं भी मौजूद हो सकती है. ऐप्लिकेशन
इंस्टॉलर को रजिस्ट्री कुंजी बनानी होगी
HKEY_LOCAL_MACHINE\SOFTWARE\Google\Chrome\NativeMessagingHosts\_com.my_company.my_application_
या
HKEY_CURRENT_USER\SOFTWARE\Google\Chrome\NativeMessagingHosts\_com.my_company.my_application_
, और
मेनिफ़ेस्ट फ़ाइल के पूरे पाथ पर उस कुंजी की डिफ़ॉल्ट वैल्यू सेट करें. उदाहरण के लिए,
निम्न आदेश:
REG ADD "HKCU\Software\Google\Chrome\NativeMessagingHosts\com.my_company.my_application" /ve /t REG_SZ /d "C:\path\to\nmh-manifest.json" /f
या यह .reg
फ़ाइल इस्तेमाल करें:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts\com.my_company.my_application]
@="C:\\path\\to\\nmh-manifest.json"
जब Chrome नेटिव मैसेजिंग होस्ट की खोज करता है, तो सबसे पहले 32-बिट रजिस्ट्री से क्वेरी की जाती है. इसके बाद, 64-बिट से क्वेरी की जाती है रजिस्ट्री.
OS X और Linux पर, नेटिव मैसेजिंग होस्ट की मेनिफ़ेस्ट फ़ाइल की जगह,
(Google Chrome या Chromium). पूरे सिस्टम में मौजूद नेटिव मैसेजिंग होस्ट को एक तय संख्या में
जगह है, जबकि उपयोगकर्ता-लेवल के नेटिव मैसेजिंग होस्ट,
उपयोगकर्ता प्रोफ़ाइल डायरेक्ट्री NativeMessagingHosts
कहा जाता है.
- OS X (पूरे सिस्टम में)
- Google Chrome:
/Library/Google/Chrome/NativeMessagingHosts/_com.my_company.my_application_.json
- क्रोमियम:
/Library/Application Support/Chromium/NativeMessagingHosts/_com.my_company.my_application_.json
- Google Chrome:
- OS X (उपयोगकर्ता के लिए, डिफ़ॉल्ट पाथ)
- Google Chrome:
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/_com.my_company.my_application_.json
- क्रोमियम:
~/Library/Application Support/Chromium/NativeMessagingHosts/_com.my_company.my_application_.json
- Google Chrome:
- Linux (पूरे सिस्टम में)
- Google Chrome:
/etc/opt/chrome/native-messaging-hosts/_com.my_company.my_application_.json
- क्रोमियम:
/etc/chromium/native-messaging-hosts/_com.my_company.my_application_.json
- Google Chrome:
- Linux (उपयोगकर्ता के लिए, डिफ़ॉल्ट पाथ)
- Google Chrome:
~/.config/google-chrome/NativeMessagingHosts/_com.my_company.my_application_.json
- क्रोमियम:
~/.config/chromium/NativeMessagingHosts/_com.my_company.my_application_.json
- Google Chrome:
नेटिव मैसेजिंग प्रोटोकॉल
Chrome हर नेटिव मैसेजिंग होस्ट को एक अलग प्रोसेस से शुरू करता है और
स्टैंडर्ड इनपुट (stdin
) और स्टैंडर्ड आउटपुट (stdout
). इसमें मैसेज भेजने के लिए इसी फ़ॉर्मैट का इस्तेमाल किया जाता है
दोनों दिशा-निर्देश: हर मैसेज को JSON कोड में बदला गया है और इसे UTF-8 कोड में बदला गया है. इससे पहले मैसेज में 32-बिट का इस्तेमाल किया जाता है
मैसेज की लंबाई नेटिव बाइट के क्रम में. मूल मैसेज से मिलने वाले किसी एक मैसेज का ज़्यादा से ज़्यादा साइज़
होस्ट 1 MB का है, जो मुख्य रूप से Chrome को स्थानीय ऐप्लिकेशन से दुर्व्यवहार से बचाने के लिए है. ज़्यादा से ज़्यादा
नेटिव मैसेजिंग होस्ट को भेजा जाने वाला मैसेज 4 जीबी का है.
नेटिव मैसेजिंग होस्ट का पहला तर्क, कॉलर का ऑरिजिन होता है. आम तौर पर,
chrome-extension://[ID of allowed extension]
. इससे नेटिव मैसेजिंग होस्ट को,
मैसेज का सोर्स जब allowed_origins
कुंजी में कई एक्सटेंशन के बारे में
नेटिव मैसेजिंग होस्ट मेनिफ़ेस्ट.
चेतावनी: Windows में, Chrome 54 और उससे पहले के वर्शन में, ऑरिजिन को दूसरे पैरामीटर के तौर पर पास किया गया था
का इस्तेमाल करें.
जब runtime.connectNative का इस्तेमाल करके मैसेजिंग पोर्ट बनाया जाता है, तो Chrome नेटिव मैसेजिंग शुरू करता है होस्ट प्रोसेस शामिल होती है और पोर्ट के खत्म होने तक उसे चालू रखती है. दूसरी ओर, जब कोई मैसेज runtime.sendNativeMessage का इस्तेमाल करके भेजा जाता है. इसके लिए, Chrome मैसेजिंग पोर्ट बनाए बिना नया पोर्ट शुरू करता है हर मैसेज को लागू करने के लिए नेटिव मैसेजिंग होस्ट की प्रोसेस. ऐसे में, होस्ट का जनरेट किया गया पहला मैसेज का इस्तेमाल, ओरिजनल अनुरोध के रिस्पॉन्स के तौर पर किया जाता है. इसका मतलब है कि Chrome इसे रिस्पॉन्स के तौर पर पास कर देगा कॉलबैक यह तब तय किया जाता है, जब runtime.sendNativeMessage को कॉल किया जाता है. इसके ज़रिए जनरेट किए गए अन्य सभी मैसेज ऐसे मामले में, नेटिव मैसेजिंग होस्ट को अनदेखा कर दिया जाता है.
Windows पर, नेटिव मैसेजिंग होस्ट को
Chrome नेटिव विंडो को कॉल किया जा रहा है: --parent-window=<decimal handle value>
. इससे नेटिव विज्ञापन
मैसेजिंग होस्ट, ऐसी नेटिव यूज़र इंटरफ़ेस (यूआई) विंडो बनाता है जिन्हें सही तरीके से पैरंट किया जाता है. ध्यान दें कि यह मान
0, अगर कॉल करने का कॉन्टेक्स्ट बैकग्राउंड स्क्रिप्ट पेज है.
स्थानीय ऐप्लिकेशन से कनेक्ट करना
किसी स्थानीय ऐप्लिकेशन पर संदेश भेजना और उससे संदेश भेजना बहुत क्रॉस-एक्सटेंशन के समान है को बढ़ावा देते हैं. दोनों में मुख्य अंतर यह है कि इसके बजाय runtime.connectNative का इस्तेमाल करना चाहिए इसके बजाय, runtime.connect और runtime.sendNativeMessage का इस्तेमाल होता है runtime.sendMessage. इन तरीकों का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब "NativeMessaging" आपके ऐप्लिकेशन के मेनिफ़ेस्ट फ़ाइल में सेव किया जाएगा.
नीचे दिए गए उदाहरण में, नेटिव मैसेजिंग होस्ट से कनेक्ट किया गया runtime.Port ऑब्जेक्ट बनाया गया है
com.my_company.my_application
, उस पोर्ट से मैसेज सुनना शुरू करता है और एक आउटगोइंग मैसेज भेजता है
संदेश:
var port = chrome.runtime.connectNative('com.my_company.my_application');
port.onMessage.addListener(function(msg) {
console.log("Received" + msg);
});
port.onDisconnect.addListener(function() {
console.log("Disconnected");
});
port.postMessage({ text: "Hello, my_application" });
runtime.sendNativeMessage का इस्तेमाल करके बिना किसी नेटिव ऐप्लिकेशन को मैसेज भेजें कोई पोर्ट, उदाहरण:
chrome.runtime.sendNativeMessage('com.my_company.my_application',
{ text: "Hello" },
function(response) {
console.log("Received " + response);
});
नेटिव मैसेज को डीबग करना
जब नेटिव मैसेजिंग होस्ट चालू नहीं हो पाता है, तो वह stderr
को लिखता है या जब वह
कम्यूनिकेशन प्रोटोकॉल, आउटपुट को Chrome के गड़बड़ी लॉग में लिखा जाता है. Linux और OS X पर, यह लॉग
कमांड लाइन से Chrome को शुरू करके और
टर्मिनल. Windows पर, लॉग इन करने का तरीका बताने वाले लेख के मुताबिक --enable-logging
का इस्तेमाल करें.
यहां कुछ गड़बड़ियां और समस्याएं हल करने के लिए सलाह दी गई है:
- नेटिव मैसेजिंग होस्ट को शुरू नहीं किया जा सका.
- देखें कि आपके पास फ़ाइल को एक्ज़ीक्यूट करने के लिए ज़रूरी अनुमतियां हैं या नहीं.
- नेटिव मैसेजिंग होस्ट का नाम अमान्य है.
- जांच लें कि नाम में कोई अमान्य वर्ण तो नहीं है. सिर्फ़ अंग्रेज़ी के छोटे अक्षरों में, अक्षर और अंक, अंडरस्कोर और बिंदुओं की अनुमति है. नाम, बिंदु से शुरू या खत्म नहीं हो सकता. साथ ही, बिंदु नहीं हो सकता उसके बाद एक और बिंदु.
- नेटिव होस्ट अब बंद हो गया है.
- Chrome के मैसेज पढ़ने से पहले, स्थानीय मैसेजिंग होस्ट का पाइप ठीक नहीं हो सका. यह ज़्यादातर आपके नेटिव मैसेजिंग होस्ट से शुरू होने की संभावना होती है.
- बताया गया नेटिव मैसेजिंग होस्ट नहीं मिला.
- क्या एक्सटेंशन और मेनिफ़ेस्ट फ़ाइल में नाम की स्पेलिंग सही है?
- क्या मेनिफ़ेस्ट को सही डायरेक्ट्री में सही नाम के साथ रखा गया है? नेटिव मैसेजिंग होस्ट की जानकारी देखें जगह की जानकारी सबमिट करें.
- क्या मेनिफ़ेस्ट फ़ाइल सही फ़ॉर्मैट में है? खास तौर पर, क्या JSON सिंटैक्स सही है और वैल्यू, नेटिव मैसेजिंग होस्ट मेनिफ़ेस्ट की परिभाषा से मेल खाती हैं?
- क्या
path
में दी गई फ़ाइल मौजूद है? Windows पर, पाथ एक-दूसरे से मिलते-जुलते हो सकते हैं. हालांकि, OS X और Linux पर, पाथ पूरे होने चाहिए.
- नेटिव मैसेजिंग होस्ट का होस्ट नेम रजिस्टर नहीं है. (सिर्फ़ Windows में)
- Windows रजिस्ट्री में स्थानीय मैसेजिंग होस्ट नहीं मिला.
regedit
का इस्तेमाल करके दोबारा जांचें क्या कुंजी वास्तव में बनाई गई थी और Native में दर्ज किए गए आवश्यक फ़ॉर्मेट से मेल खाती थी मैसेजिंग होस्ट की जगह की जानकारी.
- Windows रजिस्ट्री में स्थानीय मैसेजिंग होस्ट नहीं मिला.
- बताए गए नेटिव मैसेजिंग होस्ट का ऐक्सेस नहीं है.
- क्या एक्सटेंशन का ऑरिजिन,
allowed_origins
में शामिल किया गया है?
- क्या एक्सटेंशन का ऑरिजिन,
- नेटिव मैसेजिंग होस्ट से संपर्क करते समय गड़बड़ी हुई.
- यह एक आम गड़बड़ी है और यह बताता है कि कम्यूनिकेशन प्रोटोकॉल को गलत तरीके से लागू किया गया है नेटिव मैसेजिंग होस्ट में मिलेगी.
- पक्का करें कि
stdout
के सभी आउटपुट, नेटिव मैसेजिंग प्रोटोकॉल के मुताबिक हों. अगर आपको डीबग करने के मकसद से कुछ डेटा प्रिंट करने के लिए,stderr
पर लिखें. - पक्का करें कि 32-बिट मैसेज की लंबाई, प्लैटफ़ॉर्म के नेटिव पूर्णांक फ़ॉर्मैट (little-endian) में हो / बिग-एंडियन).
- मैसेज की लंबाई 1024*1024 से ज़्यादा नहीं होनी चाहिए.
- मैसेज का साइज़, मैसेज में मौजूद बाइट की संख्या के बराबर होना चाहिए. यह सुविधा, "अवधि" स्ट्रिंग की एक बड़ी संख्या डालें, क्योंकि हो सकता है कि वर्णों को कई बाइट से दिखाया जाए.
- सिर्फ़ Windows के लिए: पक्का करें कि प्रोग्राम का I/O मोड
O_BINARY
पर सेट हो. डिफ़ॉल्ट रूप से, I/O मोडO_TEXT
है, जो मैसेज फ़ॉर्मैट को खराब कर देता है. ऐसा इसलिए होता है, क्योंकि लाइन ब्रेक (\n
=0A
) को इससे बदल दिया जाता है Windows-स्टाइल लाइन के आखिरी हिस्से (\r\n
=0D 0A
). I/O मोड को__setmode
का इस्तेमाल करके सेट किया जा सकता है.