2013-08-30 5 views
17

में यूआरएल प्रोटोकॉल हैंडलर को कैसे पंजीकृत करें मैं एक कमांड लाइन नोड मॉड्यूल विकसित कर रहा हूं और इसे वेबसाइट पर लिंक के माध्यम से लॉन्च करने में सक्षम होना चाहता हूं।Node.js

मैं एक कस्टम प्रोटोकॉल my-module:// पंजीकृत करना चाहता हूं जैसे कि लिंक में निम्न प्रारूप होगा: my-module://action:some-action और उन पर क्लिक करने से नोड पैकेज शुरू होगा।

यदि इसके लिए कोई नोड एपीआई नहीं है (मुझे यकीन है कि वहां नहीं होगा) तो क्या कोई तरीका है कि मैं इसे सिस्टम कमांड का आह्वान करके नोड से कर सकता हूं?

यह विंडोज, लिनक्स और मैकोज़ पर काम करना चाहिए।

+0

यह एक नोड एपीआई नहीं होगा, यह एक ब्राउज़र सेटिंग होगी। – hexacyanide

+1

@hexacyanide यूआरएल प्रोटोकॉल ओएस द्वारा ब्राउज़र को संभाला नहीं जाता है, मैंने इसे विंडोज़ के लिए सफलतापूर्वक कार्यान्वित किया है (आपको कुछ रजिस्ट्री कुंजियां जोड़नी होंगी) लेकिन जानना चाहती थी कि प्रत्येक मंच को अलग से लागू करने के बजाय क्रॉस-प्लेटफार्म नोड एपीआई था या नहीं। –

+0

यह असंगत प्रतीत होता है क्योंकि प्रोटोकॉल हैंडलर को केवल सेटिंग्स के साथ क्रोम और फ़ायरफ़ॉक्स दोनों में जोड़ा जा सकता है। – hexacyanide

उत्तर

20

यह एक दिलचस्प विचार है। मुझे नहीं लगता कि वर्तमान में वहां एक क्रॉस प्लेटफार्म नोड.जेएस समाधान है।

https://github.com/rogerwang/node-webkit/issues/951 

इलेक्ट्रॉन अब MacOS और Windows के लिए app.setAsDefaultProtocolClient एपीआई (since v0.37.4) के साथ इसका समर्थन करता है: मैं वही सब मांग लोगों के इस सूत्र भर में आया था।

ऐसा करने के लिए लाइब्रेरी लिखना बहुत कठिन नहीं होगा।

विंडोज:

विंडो साथ आप अनुप्रयोग है कि URI योजना है कि हैंडल के रूप में एप्लिकेशन रजिस्टर करने के लिए है, उस पर।

आप अपने आवेदन के लिए एक रजिस्ट्री प्रविष्टि स्थापित करने के लिए की आवश्यकता होगी:

 
HKEY_CLASSES_ROOT 
    alert 
     (Default) = "URL:Alert Protocol" 
     URL Protocol = "" 
     DefaultIcon 
     (Default) = "alert.exe,1" 
     shell 
     open 
      command 
       (Default) = "C:\Program Files\Alert\alert.exe" "%1" 

तब, जब आपके आवेदन खिड़कियों द्वारा चलाया जाता है, तो आप process.argv[] में बहस को देखने के लिए सक्षम होना चाहिए। सुनिश्चित करें कि आप नोड को चलाने के लिए एक खोल लॉन्च करें, न केवल आपके आवेदन को।

Original MSDN article

नोट इस प्रशासक विशेषाधिकारों की आवश्यकता है और हैंडलर सिस्टम-वाइड सेट। प्रति उपयोगकर्ता इसे करने के लिए, आप इलेक्ट्रॉन के कार्यान्वयन does it के रूप में, HKEY_CURRENT_USER\Software\Classes का उपयोग कर सकते हैं।

एप्पल:

उद्धृत "ओएस एक्स" GitHub टिप्पणी में लेख वास्तव में iOS के लिए है।

Apple Dev Documentation

सारांश में, आप और CFBundleURLTypes साथ .plist फ़ाइल को पॉप्युलेट एक प्रक्षेपण सेवा बनाने की आवश्यकता होगी: मैं एक यूआरएल स्कीम को संभालने के लिए एक आवेदन दर्ज करने पर जानकारी के लिए निम्नलिखित प्रोग्रामिंग गाइड को देखने चाहते हैं , यह फ़ील्ड एक सरणी है और केवल प्रोटोकॉल नाम यानी http

निम्नलिखित Super User Question में एक बेहतर समाधान है, लेकिन प्रति उपयोगकर्ता सेटिंग है।

"फ़ाइल आप की तलाश है ~/Library/पसंद/com.apple.LaunchServices.plist।

यह एक सरणी कहा जाता LSHandlers, और शब्दकोश बच्चों कि एक LSHandlerURLScheme परिभाषित रखती LSHandlerRole साथ तदनुसार संशोधित किया जा सकता । "

लिनक्स: (? आश्चर्य)

मैं क्या बता सकते हैं, वहाँ कई तरीके लिनक्स में यह पूरा करने के हैं

Gnome एक उपकरण यदि आप एक URL हैंडलर पंजीकृत कर सकते हैं कि है w3 archives

gconftool-2 -t string -s /desktop/gnome/url-handlers/tel/command "bin/vonage-call %s" 
gconftool-2 -s /desktop/gnome/url-handlers/tel/needs_terminal false -t bool 
gconftool-2 -t bool -s /desktop/gnome/url-handlers/tel/enabled true 

हल्के वजन प्रबंधकों में से कुछ ऐसा लगता है कि वे आपको नकली माइम प्रकार बनाने और उन्हें यूआरआई प्रोटोकॉल हैंडलर के रूप में पंजीकृत करने की अनुमति देते हैं।

"नकली माइम-प्रकार इस तरह विभिन्न योजना के साथ URI के लिए बनाई गई हैं: आवेदन/x-XDG-प्रोटोकॉल आवेदन विशिष्ट यूआरआई प्रोटोकॉल अपने डेस्कटॉप प्रविष्टि फाइलों में उनके माइम प्रकार कुंजी को नकली माइम-प्रकार जोड़ सकते हैं समर्थन इसलिए mimeinfo.cache फ़ाइल में देखकर एक यूआरआई योजना का समर्थन करने वाले सिस्टम पर स्थापित सभी अनुप्रयोगों को ढूंढना आसान है। फिर से defaults.list फ़ाइल का उपयोग यूपीआई प्रकार के लिए एक डिफ़ॉल्ट प्रोग्राम निर्दिष्ट करने के लिए किया जा सकता है। " wiki.lxde.org

केडीई भी समर्थन करता है यूआरएल प्रोटोकॉल हैंडलर से निपटने के अपने तरीके होते:

एक फ़ाइल बनाएँ: $KDEDIR/share/services/your.protocol और प्रासंगिक डेटा से पॉप्युलेट: सभी स्थानों के last.fm forums

आशा से

 
[Protocol] 
exec=/path/to/player "%u" 
protocol=lastfm 
input=none 
output=none 
helper=true 
listing= 
reading=false 
writing=false 
makedir=false 
deleting=false 

यह सहायता करता है।

+0

ठीक है, ऐसा लगता है कि मैकोज़ और विंडोज़ भागों का जवाब है। यदि आप लिनक्स के बारे में अधिक जानकारी प्रदान कर सकते हैं, जिसमें लाइटर डेस्कटॉप वातावरण का उपयोग करके सिस्टम पर यह कैसे काम करेगा, उदाहरण के लिए, लिनक्स पर एक्सएफसीई और एलएक्सडीई; मैं बक्षीस का पुरस्कार दूंगा। (साथ ही, यह काफी हद तक लिंक आधारित है, इसलिए कृपया लिंक सड़कों के मामले में उन संसाधनों को उद्धृत करें।) – FakeRainBrigand

+0

अनुसंधान से, ऐसा लगता है कि विंडोज शायद यह सबसे अच्छा है, मैक पक्ष पर यह बहुत मुश्किल नहीं होना चाहिए। लिनक्स पक्ष पर, यदि आप जानते हैं कि अंतिम उपयोगकर्ता क्या उपयोग करेगा, तो आपको एक खुश मेडियन ढूंढने में सक्षम होना चाहिए और शायद उन प्रणालियों में से एक के साथ भाग्य हो सकता है जो काम करता है। यह एक अद्भुत एनपीएम मॉड्यूल होगा, अगर आप कुछ बनाते हैं, तो मुझे इसके बारे में प्रधान मंत्री, मुझे यह देखना अच्छा लगेगा! मैं कोडिंग और परीक्षण के साथ हाथ में फेंकने के लिए भी तैयार हूं। – jeremy

+0

बढ़िया! यह बहुत मदद करता है। मुझे लगता है कि मैं इसे सब एक नोड मॉड्यूल में लपेटूंगा, और जब यह हो जाता है तो मैं यहां एक और टिप्पणी डालूंगा। हालांकि, मैं थोड़ी देर के लिए ऐसा करने में सक्षम नहीं होगा। – FakeRainBrigand

-17

सबसे पहले अपना खुद का प्रोटोकॉल बनाना पागल है, ऐसा मत करो।

ऐसा लगता है कि आप वेब ब्राउज़र से नोड पैकेज लॉन्च करने में सक्षम होना चाहते हैं। वेब ब्राउज़र से बाहरी प्रोग्राम लॉन्च करने का सामान्य तरीका ब्राउज़र प्लगइन लिखना है।

इस प्रकार पीडीएफ, टॉरेंट्स, आईट्यून्स आपके ब्राउज़र से लॉन्च हो जाते हैं।

तो संक्षेप में जो आप चाहते हैं उसे करने के लिए आपको एक प्लगइन लिखना होगा और अपने उपयोगकर्ताओं को इंस्टॉल करना होगा। कण नहीं एक अच्छा विचार मैं कहूंगा।

+6

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

3

यहां बताया गया है मैं एक आवेदन NW.js के साथ मैक ओएस पर किया था:

  1. एप्लिकेशन खोलें /Applications/Utilities/Script Editor

    प्रकार संपादक

    on open location this_URL 
        do shell script "/Applications/X.app/Contents/MacOS/x '" & this_URL & "'" 
    end open location 
    

    बदलें एक्स में निम्न कोड आपके ऐप के नाम से

    सहेजें एक आवेदन बंडल के रूप में स्क्रिप्ट कहीं

  2. स्क्रिप्ट पर जाएं, सही पर क्लिक करके 'दिखाएँ पैकेज सामग्री' फिर संपादित Contents/info.plist

    फ़ाइल के अंत में ये पंक्तियां जोड़ें , बस </dict></plist> से पहले:

    <key>CFBundleIdentifier</key> 
    <string>com.mycompany.AppleScript.AppName</string> <!-- edit here --> 
    <key>CFBundleURLTypes</key> 
    <array> 
        <dict> 
        <key>CFBundleURLName</key> 
        <string>AppName</string> <!-- edit here --> 
        <key>CFBundleURLSchemes</key> 
        <array> 
         <string>myurlscheme</string> <!-- your url scheme here --> 
        </array> 
        </dict> 
    </array> 
    
  3. अब आप एक कड़ी खोल सकते हैं myurlscheme से शुरू: और देखें कि आपका ऐप खुल रहा है!

+0

तो क्या आप एक ऐप खोलने के लिए एक ऐप बनाते हैं? क्यों न केवल उन जानकारी को डालें .plist फ़ाइलों को उस ऐप के बारे में बताएं जिसे आप खोलना चाहते हैं? क्या यह किसी कारण से काम नहीं करेगा? – Houseman