需求:实现类似阿里旺旺,用户在网页点击发起聊天的按钮,需调起PC客户端打开对应会话,如打开会话
实现原理:
window是把自定义协议写入注册表,打开对应exe程序
mac是在Info.plist文件添加CFBundleURLTypes
Window
我们的程序是基于nsis制作的,需要在nsis脚本onInit函数里添加写注册表逻辑
合并下面的到nsis的安装脚本中,然后重新编译
注意:脚本中必须先设置了 $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盘
Mac
选择app,右键显示内容,编辑:Info.plist
<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的名字,可以为任意的值
workplus:为protocol的名字,可以为任意的值
传参
程序是基于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>
双斜杠后面的是参数
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。