需求
在網(wǎng)頁中啟動本地應(yīng)用程序并傳遞參數(shù)
實(shí)現(xiàn)
利用URL Protocol實(shí)現(xiàn)
1、URL Protocol格式,如下:
使用記事本輸入上述內(nèi)容忘渔,修改其中的協(xié)議名稱、應(yīng)用程序路徑酥艳,啟動參數(shù),并保存成reg文件。
點(diǎn)擊執(zhí)行保存的reg文件,則在注冊表中注冊了名字為MyWebshell的協(xié)議蔬充。
2、前端代碼調(diào)用
方式一:
<html>
<a href="MyWebshell:hello">Wheshell</a>
</html>
方式二:
JavaScript:
const linkTmp = document.createElement('a');
linkTmp.href = 'Grishell://test';
linkTmp.click();
3班利、本地應(yīng)用程序接收參數(shù)
本地應(yīng)用程序在入口函數(shù)中接收參數(shù)饥漫,如下:
int _tmain(int argc, _TCHAR* argv[]) //argv即為接收到的參數(shù)
改進(jìn)
通過上述方式傳遞參數(shù),只能在應(yīng)用程序啟動時(shí)接收到肥败,如果前端需要持續(xù)性的和本地應(yīng)用程序交互趾浅,則可以使用webSocket,通過webSocket傳遞消息和本地應(yīng)用程序交互馒稍,代碼如下:
createWebSocket() {
this.webSocket = new ReconnectingWebSocket('ws://XXX.XXX.XXX.XXX:XX');
this.webSocket.maxReconnectInterval = 1000;
this.webSocket.onopen = this.webSokectOnOpen;
this.webSocket.onmessage = this.webSocketOnMessage;
this.webSocket.onclose = this.webSocketOnClose;
},
webSokectOnOpen() {
if (this.webSocket.readyState == 1) {
console.log('已經(jīng)打開連接');
const params = {
.... //要傳遞的參數(shù)
};
//socket發(fā)送參數(shù)
this.webSocket.send(JSON.stringify(params));
}
},
webSocketOnMessage(event) {
// 監(jiān)聽來自本地應(yīng)用程序的數(shù)據(jù)
console.log('收到客戶端的數(shù)據(jù):' + event.data);
}
webSocketOnClose() {
if (this.webSocket.readyState == 3) {
console.log('和服務(wù)器斷開連接');
}
},