2

需求:实现类似阿里旺旺,用户在网页点击发起聊天的按钮,需调起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>

双斜杠后面的是参数


xiaokaceng
74 声望6 粉丝