自定義Protocol URL從瀏覽器運(yùn)行本地應(yīng)用

摘要:最近做一個(gè)web打印插件。瀏覽器訪問web系統(tǒng),點(diǎn)擊打印按鈕后彈出打印預(yù)覽界面,可以保存(pdf,HTML,doc,xls等)或者打印成紙質(zhì)文件。

一、設(shè)計(jì)

用java報(bào)表工具設(shè)計(jì)C/S客戶端,客戶從web系統(tǒng)下載到本地安裝??蛻粼跒g覽器點(diǎn)擊打印按鈕,瀏覽器自定義協(xié)議啟動本地打印程序。本地打印程序獲取打印數(shù)據(jù),然后進(jìn)行打印。

業(yè)務(wù)難點(diǎn)
1. 瀏覽器如何啟動本地打印程序?

2. 本地打印程序如何請求打印數(shù)據(jù)?

接下來上面兩個(gè)問題一一解答。

二、瀏覽器如何啟動本地打印程序

URL Protocol,沒錯就是標(biāo)題里所說的自定義協(xié)議。這玩意兒大家最常見的比如迅雷、電驢等。我們平時(shí)在電影天堂下載電影的時(shí)候點(diǎn)擊鏈接瀏覽器會啟動本地迅雷進(jìn)行下載。
下面是某部電影的下載鏈接瀏覽器檢查元素后

<a href="thunder://QUFmdHA6Ly95Z2R5ODp5Z2R5OEB5ZzQ1Lm..."/>

這里的"thunder"就是url protocol。這個(gè)協(xié)議需要注冊到本地電腦注冊表,具體請看這個(gè)鏈接,博主寫的非常詳細(xì)。Url Protocol自定義協(xié)議實(shí)現(xiàn)調(diào)用本地程序
我這里把這個(gè)過程封裝成 bat 批處理命令,雙擊后自動寫入到注冊表。這里自定義協(xié)議名稱為 myprotocol。
首先看看我的打印插件目錄
PrintPlugin
|—注冊.bat
|—打印程序.exe

注冊.bat

@echo off
echo =====================注冊打印控件===================
echo 注冊打印控件到注冊表,360等殺毒軟件誤報(bào)請“允許運(yùn)行”
echo ====================================================
echo 請按任意鍵開始注冊
pause>nul
set v=%~dp0
echo Windows Registry Editor Version 5.00 >regist.reg
echo [HKEY_CLASSES_ROOT\myprotocol] >>regist.reg
echo "URL Protocol"="%v:\=\\%打印程序.exe" >>regist.reg
echo @="myprotocol" >>regist.reg
echo [HKEY_CLASSES_ROOT\myprotocol\DefaultIcon] >>regist.reg
echo @="%v:\=\\%打印程序.exe,1" >>regist.reg
echo [HKEY_CLASSES_ROOT\myprotocol\shell] >>regist.reg
echo [HKEY_CLASSES_ROOT\myprotocol\shell\open] >>regist.reg
echo [HKEY_CLASSES_ROOT\myprotocol\shell\open\command] >>regist.reg
echo @="\"%v:\=\\%打印程序.exe\" \"%%1\"" >>regist.reg
regedit /s %v%regist.reg
del /q regist.reg
echo 打印控件注冊成功,按任意鍵退出
pause>nul

bat 語法很簡單,雙擊運(yùn)行命令生成regist.reg臨時(shí)文件,并且運(yùn)行regist.reg,然后靜默刪除regist.reg文件。
打印程序.exe是我制作的打印客戶端啟動入口。
在瀏覽器里我們可以這樣調(diào)用我們的打印程序

<a href="myprotocol://key" >點(diǎn)擊打印</a>

三、 本地打印程序如何請求打印數(shù)據(jù)?

請求過程:點(diǎn)擊打印→服務(wù)端生成打印數(shù)據(jù)和key,然后把key返回到瀏覽器→執(zhí)行myprotocol→本地打印程序通過key從服務(wù)端獲取打印數(shù)據(jù)

實(shí)際過程中我們完全可以把key換成鏈接,如此我們的打印客戶端通用性會更強(qiáng)。這樣客戶端直接以這個(gè)鏈接去獲取打印數(shù)據(jù)。不用關(guān)心如何取數(shù)據(jù),它只是用自己拿到的鏈接請求打印數(shù)據(jù)。比如

<a href="myprotocol://http://數(shù)據(jù)請求鏈接" >點(diǎn)擊打印</a>
**java程序如何獲取windows傳入的參數(shù)?**
這是java基礎(chǔ),我們都知道m(xù)ain函數(shù)是java程序啟動的入口。

public static void main(String[] args) {

   Systemo.out.println(args[0]); //這就是我們傳入的key

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容