क्रोम में कस्टम प्रोटोकॉल हैंडलर


88

मैं क्रोम में एक कस्टम प्रोटोकॉल हैंडलर कैसे स्थापित करूं? कुछ इस तरह:

myprotocol: // testfile

मुझे http://example.com?query=testfile पर एक अनुरोध भेजने के लिए इसकी आवश्यकता होगी , फिर मेरे एक्सटेंशन में रिप्रेज़ेंटेशन भेजें।


मुझे नहीं लगता है कि वर्तमान में क्रोम इसका समर्थन करता है, इसमें एपीआई के बजाय सीमित सीमित एक्सटेंशन उपलब्ध हैं।
व्लादिमीर पालंट

जवाबों:


77

निम्न विधि URI स्कीम के लिए एक आवेदन को पंजीकृत करती है। इसलिए, आप स्थानीय एप्लिकेशन को ट्रिगर करने के लिए अपने HTML कोड में mycustproto का उपयोग कर सकते हैं । यह Google Chrome संस्करण 51.0.2704.79 मीटर (64-बिट) पर काम करता है।

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

HTML कोड (सरल):

<a href="mycustproto:Hello World">Click Me</a>

HTML कोड (वैकल्पिक):

<input id="DealerName" />
<button id="PrintBtn"></button>

$('#PrintBtn').on('click', function(event){
  event.preventDefault();
  window.location.href = 'mycustproto:dealer ' + $('#DealerName').val();
});

यूआरआई योजना इस तरह दिखाई देगी:

आप रजिस्ट्री में मैन्युअल रूप से URI स्कीम बना सकते हैं, या "mycustproto.reg" फ़ाइल (नीचे देखें) चला सकते हैं।

HKEY_CURRENT_USER\Software\Classes
   mycustproto
      (Default) = "URL:MyCustProto Protocol"
      URL Protocol = ""
      DefaultIcon
         (Default) = "myprogram.exe,1"
      shell
         open
            command
               (Default) = "C:\Program Files\MyProgram\myprogram.exe" "%1"

mycustproto.reg उदाहरण:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\mycustproto]
"URL Protocol"="\"\""
@="\"URL:MyCustProto Protocol\""

[HKEY_CURRENT_USER\Software\Classes\mycustproto\DefaultIcon]
@="\"mycustproto.exe,1\""

[HKEY_CURRENT_USER\Software\Classes\mycustproto\shell]

[HKEY_CURRENT_USER\Software\Classes\mycustproto\shell\open]

[HKEY_CURRENT_USER\Software\Classes\mycustproto\shell\open\command]
@="\"C:\\Program Files\\MyProgram\\myprogram.exe\" \"%1\""

C # कंसोल एप्लिकेशन - myprogram.exe:

using System;
using System.Collections.Generic;
using System.Text;

namespace myprogram
{
  class Program
  {
    static string ProcessInput(string s)
    {
       // TODO Verify and validate the input 
       // string as appropriate for your application.
       return s;
    }

    static void Main(string[] args)
    {
      Console.WriteLine("Raw command-line: \n\t" + Environment.CommandLine);
      Console.WriteLine("\n\nArguments:\n");

      foreach (string s in args)
      {
        Console.WriteLine("\t" + ProcessInput(s));
      }

      Console.WriteLine("\nPress any key to continue...");
      Console.ReadKey();
    }
  }
}

यह सुनिश्चित करने के लिए कार्यक्रम को पहले चलाने की कोशिश करें कि कार्यक्रम सही रास्ते पर रखा गया है:

cmd> "C:\Program Files\MyProgram\myprogram.exe" "mycustproto:Hello World"

अपने HTML पेज के लिंक पर क्लिक करें:

आप पहली बार एक चेतावनी विंडो पॉपअप देखेंगे।

यहाँ छवि विवरण दर्ज करें

Chrome में बाहरी प्रोटोकॉल हैंडलर सेटिंग को रीसेट करने के लिए:

यदि आपने कभी क्रोम में कस्टम प्रोटोकॉल को स्वीकार किया है और सेटिंग को रीसेट करना चाहते हैं, तो यह करें (वर्तमान में, सेटिंग को बदलने के लिए क्रोम में कोई UI नहीं है):

" स्थानीय राज्य " को इस पथ के अंतर्गत संपादित करें :

C:\Users\Username\AppData\Local\Google\Chrome\User Data\

या बस जाओ:

%USERPROFILE%\AppData\Local\Google\Chrome\User Data\

फिर, इस स्ट्रिंग की खोज करें: प्रोटोकॉल_हैंडलर

आपको वहां से कस्टम प्रोटोकॉल दिखाई देगा।

नोट: कृपया फ़ाइल संपादित करने से पहले अपने Google Chrome को बंद कर दें । अन्यथा, आपके द्वारा किया गया परिवर्तन Chrome द्वारा अधिलेखित कर दिया जाएगा।

संदर्भ:

https://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx


यह आशाजनक लग रहा है, क्या मैं टैबलेट से प्रिंट करने के लिए इस दृष्टिकोण का उपयोग कर सकता हूं। यदि ऐसा है तो उस स्थिति में रजिस्ट्री आदि से कैसे निपटा जाए
वेंकट

1
@ वेंकट मुझे लगता है कि टैबलेट नाम और ऑपरेटिंग सिस्टम को पहले निर्दिष्ट करना बेहतर है (भूतल: भूतल, आईपैड, आदि) और देखें कि क्या दूसरों ने पहले किया है। मैंने जो समाधान पोस्ट किया है वह विंडोज के लिए था। मैंने ओएस एक्स और लिनक्स के लिए समान सेटिंग्स देखी हैं। हालाँकि, मेरे पास ये उपकरण / पर्यावरण प्रयोग के लिए उपयोगी नहीं थे। यह कैसे काम करता है इसका मूल विचार प्राप्त करने के लिए आप इसे पहले विंडोज पर आजमा सकते हैं। मुझे उम्मीद है कि इससे सहायता मिलेगी।
Jun Xie

3
रिकॉर्ड के लिए, मैंने फ़ाइल में प्रोटोकॉल_हैंडलरPreferences%localappdata%\Google\Chrome\User Data\Default
कॉन्फिगर

क्रोम के भीतर एक एकल जावास्क्रिप्ट कॉल में एक के बाद एक कई प्रोटोकॉल लागू करने में असमर्थ।
प्रीमियर

अगर मेरी चाबी रजिस्ट्री में नहीं मिली तो क्या होगा? ब्राउज़र से मैं कुंजी के आधार पर एप्लिकेशन को कॉल करने के लिए कह रहा हूं? यहां, मैं उपयोगकर्ता को कैसे सूचित कर सकता हूं कि रजिस्ट्री में कुंजी नहीं मिली है?
अखिल नायर

55

Chrome 13 अब navigator.registerProtocolHandlerAPI का समर्थन करता है। उदाहरण के लिए,

navigator.registerProtocolHandler(
    'web+custom', 'http://example.com/rph?q=%s', 'My App');

ध्यान दें कि आपके प्रोटोकॉल नाम को web+सामान्य लोगों (जैसे mailto, आदि) के लिए कुछ अपवादों के साथ शुरू करना है । अधिक जानकारी के लिए, देखें: http://updates.html5rocks.com/2011/06/Registering-a-custom-protocol-handler


6
+1 इस तथ्य के लिए कि प्रोटोकॉल "SECURITY_ERR: DOM एक्सेप्शन 18" से बचने के लिए वेब + से शुरू होना चाहिए
Catch22

3
फिर कैसे torrent:और steam:लिंक काम करते हैं? क्या क्रोम पैक किए गए ऐप्स में भी यह प्रतिबंध है?
स्टीवन रोज

1
@StevenRoose मैं जो कुछ भी बता सकता हूं, उनमें से क्रोम ओएस पर गुजरता है। यहां तक ​​कि chrome.webNavigationएपीआई का उपयोग करते हुए , tel:लिंक कभी भी रिपोर्ट नहीं किए जाते हैं।
PixnBits

यह क्रोम ऐप के अंदर काम नहीं करता है, और ऐप के अंदर प्रोटोकॉल को रीडायरेक्ट करने में सक्षम नहीं लगता है। बहुत बेहतर जवाब नीचे गॉर्डन विलियम्स जवाब है।
कारेल बिलेक


30

यह प्रश्न अब पुराना है, लेकिन क्रोम के लिए हाल ही में एक अद्यतन किया गया है (कम से कम जहां पैकेज्ड ऐप्स चिंतित हैं) ...

http://developer.chrome.com/apps/manifest/url_handlers

तथा

https://github.com/GoogleChrome/chrome-app-samples/tree/master/samples/url-handler

यह आपको URL के लिए एक हैंडलर पंजीकृत करने की अनुमति देता है (जब तक आप इसके मालिक हैं)। अफसोस की बात है कि myprotocol://कम से कम आप कर सकते हैं http://myprotocol.mysite.comऔर वहां एक वेबपेज बना सकते हैं जो लोगों को ऐप स्टोर में ऐप की ओर इशारा करता है।


इस उत्तर के लिए बहुत बहुत धन्यवाद! शीर्ष मतदान जवाब के विपरीत, यह वास्तव में सवाल का जवाब देता है!
कारेल बिलेक

10

मैंने इस तरह से इसे किया। आपके ऐप को इंस्टॉलेशन पर कुछ रेज कुंजियाँ स्थापित करने की आवश्यकता होगी, फिर किसी भी ब्राउज़र में आप बस foo: \ somethingHere.txt से लिंक कर सकते हैं और यह आपके ऐप को खोल देगा और इसे उस मान को पास कर देगा।

यह मेरा कोड नहीं है, बस उसी प्रश्न को खोजते समय मैंने वेब पर कुछ पाया। बस नीचे दिए गए पाठ में सभी "foo" बदलें जो आप चाहते हैं प्रोटोकॉल नाम से और साथ ही अपने निर्वासन के लिए पथ बदलें।

(इसे अपने डेस्कटॉप पर foo.reg के रूप में सहेजें के रूप में एक पाठ फ़ाइल में डाल दिया, तो कुंजी को स्थापित करने के लिए इसे डबल क्लिक करें) ----- इस रेखा के नीचे .reg फ़ाइल (इस पंक्ति को शामिल नहीं) में जाता है --- ---

REGEDIT4

[HKEY_CLASSES_ROOT\foo]
@="URL:foo Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\foo\shell]

[HKEY_CLASSES_ROOT\foo\shell\open]

[HKEY_CLASSES_ROOT\foo\shell\open\command]
@="\"C:\\Program Files (x86)\\Notepad++\\notepad++.exe\" \"%1\"" 

5
यह क्रोम में काम नहीं करता है, जो विशिष्ट प्रश्न था।
Kjetil Watnedal

1
@KjetilWatnedal: यह क्रोम में ठीक काम करता है (कम से कम v40 + में) और इस समाधान के साथ। प्रारंभिक प्रश्न से संबंधित, ओपी चाहता था कि ब्राउज़र किसी साइट पर स्वचालित रूप से कुछ प्रस्तुत करे, जाहिरा तौर पर एक स्थानीय हैंडलर एप्लिकेशन के बिना, जो वास्तव में संभव नहीं हो सकता है।
मार्सेल एन

7
मैं सभी को उसका समाधान बताना चाहता हूं, वास्तव में, क्रोम में काम करता है (आज 49.0.2623.87 में परीक्षण किया गया)। हालाँकि, मैंने पाया कि यदि आप इस प्रोटोकॉल को सीधे ब्राउज़र में टाइप करते हैं (foo: // C: /test.txt) तो आपको ctrl + एंटर का उपयोग करना पड़ सकता है क्योंकि ब्राउज़र ने प्रोटोकॉल को तुरंत पहचाना नहीं है और खोज प्रोटोकॉल इंटरसेप्ट करता है OS से पहले की कार्रवाई। एक कड़ी में डालकर सही ढंग से काम किया, हालांकि।
टिम्मी

@ टिम्मी - थैंक यू सो मच! मैं अपने बालों को फाड़कर क्रोम में काम करने के लिए प्रोटोकॉल हैंडलर प्राप्त करने की कोशिश कर रहा हूं - मुझे लगता है कि मुझे Ctrl + Enter का उपयोग करने की आवश्यकता थी! एक बार फिर धन्यवाद!
लेन

@ टिम्मी आपको बहुत धन्यवाद, मैंने पहले ही सोचा था कि मेरे उपयोगकर्ताओं को इंटरनेट एक्सप्लोरर से चिपके रहना होगा
पाइप

2

यह सुनिश्चित नहीं है कि यह मेरे उत्तर के लिए सही जगह है, लेकिन जैसा कि मुझे बहुत कम सहायक सूत्र मिले और यह उनमें से एक था, मैं यहां अपना समाधान पोस्ट कर रहा हूं।

समस्या : मैं चाहता था कि लिनक्स मिंट 19.2 दालचीनी mailtoक्रोमियम में लिंक पर क्लिक करने पर इवोल्यूशन खोलें । जीमेल को क्रोम में डिफ़ॉल्ट हैंडलर के रूप में पंजीकृत किया गया : // सेटिंग्स / हैंडलर और मैं किसी अन्य हैंडलर का चयन नहीं कर सका।

समाधान : कंसोल में xdg-settings का उपयोग करें

xdg-settings set default-url-scheme-handler mailto org.gnome.Evolution.desktop

समाधान यहाँ पाया गया था https://alt.os.linux.ubuntu.narkive.com/U3Gy7inF/kubuntu-mailto-links-in-chrome-doesn-t-open-evolution और मेरे मामले के लिए अनुकूलित।


0

खुला हुआ

C:\Users\<Username>\AppData\Local\Google\Chrome\User Data\Default

खुले Preferencesतो excluded_schemesआप के लिए खोज 'प्रोटोकॉल_हैंडलर' में इस अपवर्जित योजना को हटाएंगे ताकि क्रोम को डिफ़ॉल्ट एप्लिकेशन के साथ खोलने के लिए क्रोम को रीसेट किया जा सके।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.