2016-02-29 6 views
10

मैं लिनक्स पर Google क्रोम के लिए एक कस्टम प्रोटोकॉल हैंडलर बना रहा हूं। मेरे लिंक इस तरह दिखता है:क्यों लिनक्स पर क्रोम अज्ञात प्रोटोकॉल के लिए "बाहरी प्रोटोकॉल अनुरोध" संवाद दिखाता है?

<a href="myprotocol:someargument">Trigger my app with param</a> 

मैंने देखा है कि अगर 'myprotocol:' पंजीकृत नहीं है (मेरे ऐप इंस्टॉल नहीं), गूगल क्रोम लिनक्स पर प्रदर्शित करता है "बाहरी प्रोटोकॉल अनुरोध" संवाद और XDG से खोलने का उपयोग करने की कोशिश करता है :

enter image description here

हालांकि ऐसे Windows 10 और ओएस एक्स एल कैप्टन कुछ भी नहीं के रूप में अन्य ओएस, पर यदि प्रोटोकॉल पंजीकृत नहीं है प्रदर्शित होता है।

मैंने यह भी सत्यापित किया है कि फ़ायरफ़ॉक्स विंडोज, ओएस एक्स और लिनक्स पर अज्ञात प्रोटोकॉल के लिए लगातार काम करता है - कुछ भी प्रदर्शित नहीं होता है।

लिनक्स पर क्रोम व्यवहार उपयोगकर्ताओं के लिए काफी भ्रमित है।

कोई विचार क्यों लिनक्स पर क्रोम (मैं उबंटू 14.04 पर परीक्षण कर रहा था) किसी अन्य ओएस और वेब ब्राउज़र से अलग-अलग कार्य करता है?

उत्तर

3

समस्या वास्तव में है कि यदि क्रोम में स्थानीय प्रोटोकॉल हैंडलर की कमी है तो यह उपयोगकर्ता के पर्यावरण में कॉन्फ़िगर किए गए हैंडलर का उपयोग करना चाहता है। एक डिफ़ॉल्ट हैंडलर लॉन्च करने के लिए कोई भी दो ओएस बिल्कुल वही एपीआई प्रदान नहीं करता है। वास्तव में यह लॉन्च करने से पहले यह प्रोग्राम क्या होगा, यह पता लगाने के लिए कि विंडोज या लिनक्स पर एक स्पष्ट एपीआई भी नहीं है।

"मैक" और विंडोज़ कार्यान्वयन दोनों ही अंत में प्रोटोकॉल के लिए कौन सा बाहरी अनुप्रयोग जिम्मेदार है और इसलिए कॉल चेतावनी जारी किए बिना अनचाहे कॉल को दबाने में सक्षम हैं। लेकिन विंडोज़ कार्यान्वयन वास्तव में एक क्लज है जो विंडोज़ पर मौजूदा संस्करणों पर विंडोज रजिस्ट्री के अवलोकनों पर निर्भर करता है। इस प्रकार का एपीआई उल्लंघन लिनक्स पर अधिक खतरनाक है जहां कई स्वादों में संबंधित सेटिंग्स टूल के बहुत अलग फोर्क होते हैं।

यह वास्तव में considered a bug है कि विंडोज और ओएसएक्स वैकल्पिक चेतावनी जारी नहीं करते हैं कि उन्होंने कुछ भी नहीं कहा है, इसलिए यदि आप सोचते हैं कि यह सही व्यवहार है तो आप यहां टिप्पणी करना चाहेंगे।

लिनक्स

लिनक्स में, जब आप (विंडो) प्रणाली के साथ प्रोटोकॉल हैंडलर रजिस्टर, आप की तरह कुछ करना:

यहाँ कैसे 3 सिस्टम वर्तमान स्रोत के आधार पर काम करने की मेरी प्रेक्षण है

xdg-settings set default-url-scheme-handler myprotocol evolution.desktop 

अब, आवेदन विकास अपने प्रोटोकॉल के लिए जिम्मेदार है और कुछ भी कॉल कर सकते हैं:

xdg-open myprotocol:... 

अब इन लिंक पर विकास को खोलने के लिए। अन्य ओएस में समान तंत्र हैं, लेकिन कॉल स्टब के रूप में बाहरी प्रोग्राम नहीं हो सकता है।

यह अच्छा और अमूर्त है और knowing/saying the external app you are calling is xdg-open लिनक्स कार्यान्वयन में बहुत जटिलता को रोकता है। लेकिन यह वास्तव में वह जानकारी नहीं है जिसे उपयोगकर्ता संभवतः चाहता है। उस जानकारी को प्राप्त करने के लिए xdg-settings का उपयोग करने की आवश्यकता होगी और इस प्रणाली के कुछ स्वादों में डिफ़ॉल्ट हैंडलर को सशर्त रूप से ओवरराइड करने का कोई तरीका होगा या नहीं, तो गलत होने का जोखिम होगा।

विंडोज

विंडोज हैंडलर में, जाहिरा तौर पर आप सिर्फ snooping around in the registry जा सकते हैं और उसके बाद क्या बुला एपीआई वास्तव में करने जा रहा है के रूप में एक उचित अनुमान लगाने के। तकनीकी रूप से, क्रोम को ऐसा करना होता है क्योंकि बाहरी प्रोग्राम खोलने के तरीके से सिस्टम एपीआई के माध्यम से होता है, इसलिए चेतावनी में संदर्भ देने के लिए xdg-open जैसे बाहरी स्टब नहीं है।

मैक

"मैक" हैंडलर में, वहाँ, एप्लिकेशन अपने विशिष्ट URL लॉन्च कर देगा, तो क्रोम does के बारे में पूछने के लिए तो if the application name the empty string यह पूरी तरह से चेतावनी पैदा करने से पहले कॉल ड्रॉप कर सकते हैं एक उचित एपीआई है।

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