需求:实现相似阿里旺旺,用户在网页点击发起聊天的按钮,需调起PC客户端打开对应会话,如打开会话shell
实现原理:
window是把自定义协议写入注册表,打开对应exe程序
mac是在Info.plist文件添加CFBundleURLTypesapp
咱们的程序是基于nsis制做的,须要在nsis脚本onInit函数里添加写注册表逻辑函数
合并下面的到nsis的安装脚本中,而后从新编译code
注意:脚本中必须先设置了 $INSTDIR 变量事件
Function .onInit Var /GLOBAL protocol StrCpy $protocol "workplus" Var /GLOBAL app StrCpy $app "$INSTDIR\workplus\WorkPlus.exe" SetRegView 64 WriteRegStr HKCR "$protocol" "" "URL:$protocol Protocol" WriteRegStr HKCR "$protocol" "URL Protocol" "" WriteRegStr HKCR "$protocol\shell\open\command" "" "$\"$app$\" $\"%1$\"" SetRegView 32 WriteRegStr HKCR "$protocol" "" "URL:$protocol Protocol" WriteRegStr HKCR "$protocol" "URL Protocol" "" WriteRegStr HKCR "$protocol\shell\open\command" "" "$\"$app$\" $\"%1$\"" FunctionEnd
注意:这段代码要放在install周期去执行,否则$INSTDIR默认是C盘开发
选择app,右键显示内容,编辑:Info.pliststring
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>workplus handler</string> <key>CFBundleURLSchemes</key> <array> <string>workplus</string> </array> </dict> </array>
workplus handler:为handler的名字,能够为任意的值 it
workplus:为protocol的名字,能够为任意的值io
程序是基于nwjs-0.12.3的版本开发的,每次唤起App都会触发open或reopen事件,
捕获事件后能够经过函数参数或nw.App.argv[0]获取外部参数编译
坑: mac nwjs-0.12.3有bug, 不能获取到参数,只能升级到0.13之后的版本
window nwjs-0.12.3 参数后面会带多一个斜杠
<a href="workplus://xxxxx" >打开会话</a>
双斜杠后面的是参数