2011-08-17 33 views
59

Làm cách nào để thiết lập trình xử lý giao thức tùy chỉnh trong chrome? Một cái gì đó như:Trình xử lý giao thức tùy chỉnh trong chrome

myprotocol: // testfile

tôi sẽ cần điều này để gửi một yêu cầu đến http://example.com?query=testfile, sau đó gửi HttpResponse để mở rộng của tôi.

+0

Tôi không nghĩ rằng Chrome hiện hỗ trợ này, nó có một bộ thay vì hạn chế về các API có sẵn cho phần mở rộng. –

Trả lời

47

Chrome 13 hiện hỗ trợ API navigator.registerProtocolHandler. Ví dụ,

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

Lưu ý rằng tên giao thức của bạn phải bắt đầu với web+, với một vài trường hợp ngoại lệ cho những người thân chung (như mailto, vv). Để biết thêm chi tiết, xem: http://updates.html5rocks.com/2011/06/Registering-a-custom-protocol-handler

+5

+1 cho thực tế là các giao thức phải bắt đầu bằng web + để tránh "SECURITY_ERR: DOM ngoại lệ 18" – Catch22

+3

Cách liên kết 'torrent:' và 'steam:' hoạt động sau đó? Ứng dụng đóng gói của Chrome cũng có hạn chế này không? –

+0

@StevenRoose Từ những gì tôi có thể biết, Chrome chuyển những thứ đó cho hệ điều hành. Ngay cả khi sử dụng API 'chrome.webNavigation', các liên kết' tel: 'sẽ không bao giờ được báo cáo. – PixnBits

4

Đây là cách tôi đã làm. Ứng dụng của bạn sẽ cần phải cài đặt một vài phím reg khi cài đặt, sau đó trong bất kỳ trình duyệt nào bạn chỉ có thể liên kết đến foo: \ anythingHere.txt và ứng dụng sẽ mở ứng dụng của bạn và chuyển cho nó giá trị đó.

Đây không phải mã của tôi, chỉ là nội dung tôi tìm thấy trên web khi tìm kiếm cùng một câu hỏi. Chỉ cần thay đổi tất cả "foo" trong văn bản bên dưới thành tên giao thức bạn muốn và thay đổi đường dẫn đến exe của bạn.

(đặt tệp này vào tệp văn bản như lưu dưới dạng foo.reg trên màn hình của bạn, sau đó nhấp đúp vào nó để cài đặt khóa) ----- Bên dưới dòng này đi vào tệp .reg (KHÔNG bao gồm dòng) ------

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

Điều này không hoạt động trong chrome, đó là câu hỏi cụ thể. –

+0

@KjetilWatnedal: Nó hoạt động tốt trong Chrome (ít nhất là trong v40 +) và với giải pháp này.Liên quan đến câu hỏi ban đầu, OP muốn trình duyệt gửi nội dung nào đó đến một trang web một cách tự động, rõ ràng là không có ứng dụng xử lý cục bộ, điều này thực sự không thể thực hiện được. –

+0

Tính năng này không hoạt động trong phiên bản Chrome 43+ – YumYumYum

18

câu hỏi này là cũ bây giờ, nhưng có được một bản cập nhật gần đây Chrome (ít nhất là nơi các ứng dụng đóng gói có liên quan) ...

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

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

Nó cho phép bạn đăng ký trình xử lý cho URL (miễn là bạn sở hữu nó). Đáng buồn là không có myprotocol:// nhưng ít nhất bạn có thể làm http://myprotocol.mysite.com và có thể tạo một trang web ở đó trỏ mọi người đến ứng dụng trong cửa hàng ứng dụng.

+0

Cảm ơn LOT vì câu trả lời này! Không giống như câu trả lời bình chọn hàng đầu, nó thực sự trả lời câu hỏi! –

+1

Các liên kết của bạn bị hỏng. Bạn có thể vui lòng cung cấp giải pháp đúng không. – YumYumYum

+1

Google đã tái cấu trúc repo, bây giờ tôi đã cập nhật liên kết. –

44

Phương pháp sau đây đăng ký một ứng dụng cho một sơ đồ URI. Vì vậy, bạn có thể sử dụng mycustproto: trong mã HTML của mình để kích hoạt ứng dụng cục bộ. Nó hoạt động trên phiên bản Google Chrome phiên bản 51.0.2704.79 m (64 bit).

Tôi chủ yếu sử dụng phương pháp này để in tài liệu một cách im lặng mà không có hộp thoại in bật lên. Kết quả là khá tốt và là một giải pháp liền mạch để tích hợp ứng dụng bên ngoài với trình duyệt.

HTML code (đơn giản):

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

HTML (thay thế):

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

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

URI Scheme sẽ trông như thế này:

Bạn có thể tạo lược đồ URI theo cách thủ công trong registry hoặc chạy "mycustpro to.reg "tệp (xem bên dưới).

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" 

dụ mycustproto.reg:

C# console ứng dụng - 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(); 
    } 
    } 
} 

Cố gắng chạy chương trình đầu tiên để đảm bảo chương trình đã được đặt đúng đường dẫn:

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

Nhấp vào liên kết trên trang HTML của bạn:

Bạn sẽ thấy một cửa sổ cảnh báo popup để lần đầu tiên.

enter image description here

Để thiết lập lại giao thức xử lý bên ngoài thiết lập trong Chrome:

Nếu bạn đã từng chấp nhận giao thức tùy chỉnh trong Chrome và muốn thiết lập lại các thiết lập, thực hiện điều này (hiện tại, có không có giao diện người dùng trong Chrome để thay đổi các thiết lập):

chỉnh sửa "Nhà nước địa phương" tập tin này dưới con đường này:

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

hoặc Chỉ cần vào:

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

Sau đó, tìm kiếm chuỗi này: protocol_handler

Bạn sẽ thấy giao thức tùy chỉnh từ đó.

Lưu ý: Vui lòng đóng Google Chrome của bạn trước khi chỉnh sửa tệp. Nếu không, thay đổi bạn đã thực hiện sẽ bị Chrome ghi đè.

tham khảo:

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

+0

điều này có vẻ đầy hứa hẹn, tôi có thể sử dụng phương pháp này để in từ máy tính bảng hay không. nếu vậy làm thế nào để đối phó với đăng ký vv trong trường hợp đó – Venkat

+1

@Venkat Tôi nghĩ rằng nó tốt hơn để xác định tên máy tính bảng và hệ điều hành đầu tiên (ví dụ: Surface, iPad, vv) và xem những người khác đã làm điều đó trước đây chưa. Giải pháp tôi đã đăng là dành cho Windows. Tôi đã thấy các cài đặt tương tự cho OS X và Linux. Tuy nhiên, tôi không có những thiết bị/môi trường này tiện dụng để thử nghiệm. Bạn có thể thử nó trên Windows đầu tiên để có được ý tưởng cơ bản về cách nó hoạt động. Hy vọng điều này có thể giúp cho bạn. –

+0

Để ghi lại, tôi đã tạo tùy chọn * protocol_handler * config trong tệp 'Preferences', nằm ở'% localappdata% \ Google \ Chrome \ User Data \ Default' – Babblo

Các vấn đề liên quan