Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Watchkit传递NSURL->;本地Cordova应用程序和;用Javascript打开浏览器_Javascript_Ios_Cordova_Watchkit_Handoff - Fatal编程技术网

如何从Watchkit传递NSURL->;本地Cordova应用程序和;用Javascript打开浏览器

如何从Watchkit传递NSURL->;本地Cordova应用程序和;用Javascript打开浏览器,javascript,ios,cordova,watchkit,handoff,Javascript,Ios,Cordova,Watchkit,Handoff,我有一个正在运行的cordova应用程序,并构建了一个Watchkit应用程序。意识到我不能将本机应用程序调用到前台,也不能对其内部工作做很多事情,我想使用切换来简单地通过Safari将用户发送到一个网页,该网页基本上可以从应用程序中提取代码并处理URL查询字符串参数。所以我写了一个例程,基本上是这样做的: var URLwithQuery = "http://www.example.com?query="+QueryVar var urlPath: String = URLwit

我有一个正在运行的cordova应用程序,并构建了一个Watchkit应用程序。意识到我不能将本机应用程序调用到前台,也不能对其内部工作做很多事情,我想使用切换来简单地通过Safari将用户发送到一个网页,该网页基本上可以从应用程序中提取代码并处理URL查询字符串参数。所以我写了一个例程,基本上是这样做的:

   var URLwithQuery = "http://www.example.com?query="+QueryVar

   var urlPath: String = URLwithQuery
   var url: NSURL = NSURL(string: urlPath)!

   updateUserActivity("com.example.www.hellobrowser", 
           userInfo: ["name":"WhereAmI"], webpageURL: url)
现在,我无法测试,因为我没有手表,模拟器也不支持切换。但我怀疑这是否会起作用:我已经在本机应用程序的root info.plist中手动插入了NSUserActivityTypes数组和“hellobrowser”活动,但这是一个严重未记录的区域,虽然所有内容都在编译和运行,但我不知道它是否会触发切换,直到我可以在实际的手表上运行它。墨菲定律说它会失败

另一种方法是以某种方式将NSURL传递回Cordova并使用

window.open('http://www.example.com?Query='+QueryVar, '_system');
为了实现这一点,我将使用它,它允许在Watchkit扩展和cordova应用程序中的javascript之间传递JSON对象。因此,在本机应用程序端,我将实现这个消息传递示例的一个版本,以传递字符串化的NSURL(除了这个示例是iPhone->iPhone而不是Watchkit->iPhone):

然而,我对传递JSON对象很在行,并且没有任何示例说明Watchkit应用程序或扩展中的Swift代码将NSURL传递回监听器的样子


我怀疑有一个更简单的方法来做到这一点!!如果我能从Watchkit应用程序中以字符串的形式获取NSURL,并将其输入到我的原生应用程序的javascript中,那么我将从中获益匪浅

在您的WatchKit扩展中,您需要引用库(编译并包含在插件中)并执行以下操作:

var wormhole: MMWormhole!

wormhole = MMWormhole(applicationGroupIdentifier: "group.com.hellobrowser",
    optionalDirectory: nil)

wormhole.listenForMessageWithIdentifier("myqueue", listener: yourHandler)
然后,要通过Apple Watch插件从Cordova应用程序发送消息,以便WatchKit扩展侦听器接收该消息:

applewatch.init(function () {
    applewatch.sendMessage("test", "myqueue");
}, null, "group.com.hellobrowser");
或者,如果您想设置Cordova应用程序和WatchKit扩展程序中可读写的值,您可能需要查看使用,这是自发布此问题以来仅在插件中实现的


我希望这会有所帮助,当我了解苹果公司批准这些方法时,我会提供一个完整的示例应用程序或详细的博客文章。

谢谢,李。希望苹果会出现——你的插件是一个非常简单的解决方案,可以让cordova应用程序和watchkit扩展互相对话。苹果昨天批准了它(如果你想看到它工作的话,请提供无耻的链接:)我想不出关于桥接文件的事情。。。我的分机是swift的,但我不能那样叫MMWormhole
applewatch.init(function () {
    applewatch.sendMessage("test", "myqueue");
}, null, "group.com.hellobrowser");