2011-08-17 31 views

回答

47

Chrome 13現在支持navigator.registerProtocolHandler API。例如,

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

+5

+1,因爲協議必須以web +開頭才能避免出現「SECURITY_ERR:DOM Exception 18」 – Catch22

+3

如何使'torrent:'和'steam:'鏈接起作用? Chrome套裝應用也有這個限制嗎? –

+0

@StevenRoose據我所知,Chrome將這些傳遞給操作系統。即使使用'chrome.webNavigation' API,也不會報告「tel:」鏈接。 – PixnBits

4

這就是我做到的。您的應用程序需要在安裝時安裝幾個註冊表鍵,然後在任何瀏覽器中,您都可以鏈接到foo:\ anythingHere.txt,它會打開您的應用程序並將其傳遞給該值。

這不是我的代碼,只是我在搜索同一問題時在網上找到的東西。只需將下面的文本中的所有「foo」更改爲所需的協議名稱,並將路徑更改爲您的exe。

(把它放在一個文本文件中,保存爲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

這不適用於chrome,這是一個具體問題。 –

+0

@KjetilWatnedal:它在Chrome(至少在v40 +)和這個解決方案中工作正常。與最初的問題相關,OP希望瀏覽器自動提交一些內容到站點,顯然沒有本地處理程序應用程序,這確實可能是不可能的。 –

+0

這不適用於Chrome版本43+ – YumYumYum

18

這個問題現在是老了,但已經有新的更新到Chrome瀏覽器(至少在打包應用程序而言)...

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,並可以創建一個網頁,指向應用商店中的應用。

+0

非常感謝這個答案!不像頂尖的投票答案,它實際上回答了這個問題! –

+1

您的鏈接已損壞。你能否提供正確的解決方案? – YumYumYum

+1

谷歌重構了回購,我現在更新了鏈接。 –

44

以下方法將應用程序註冊到URI方案。因此,您可以在您的HTML代碼中使用mycustproto:來觸發本地應用程序。它可以在谷歌瀏覽器版本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方案看起來就像這樣:

您可以創建在註冊表中手動配置URI Scheme,或者運行「mycustpro」 to.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例如:

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頁面上的鏈接:

您將看到首次警告窗口彈出。

enter image description here

要重置外部協議處理程序在瀏覽器中設置:

如果你曾經接受Chrome中的自定義協議,並想重新設置,做到這一點(目前,有在Chrome沒有UI更改設置):

編輯「地方國家」這個路徑下的文件:

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

或者乾脆去:

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

然後,搜索字符串:protocol_handler

你會看到從那裏定製協議。

注意:在編輯文件之前,請關閉您的谷歌瀏覽器。否則,您所做的更改將被Chrome覆蓋。

參考:

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

+0

這看起來很有前途,我可以使用這種方法從平板電腦打印。如果是這樣的話如何處理註冊表等 – Venkat

+1

@Venkat我認爲最好先指定平板電腦名稱和操作系統(例如:Surface,iPad等),然後查看其他人是否已經完成此操作。我發佈的解決方案是針對Windows的。我已經看到了OS X和Linux的類似設置。但是,我沒有這些設備/環境方便實驗。你可以先在Windows上試用它,以獲得它的工作原理。我希望這將有所幫助。 –

+0

爲了記錄,我在位於'%localappdata%\ Google \ Chrome \ User Data \ Default'的'Preferences'文件中創建了* protocol_handler * config選項。 – Babblo