Cordova - 从远程 HTML 访问设备功能
Posted
技术标签:
【中文标题】Cordova - 从远程 HTML 访问设备功能【英文标题】:Cordova - Access device functionality from remote HTML 【发布时间】:2015-07-14 20:33:09 【问题描述】:我有一个等待deviceready
事件的 Cordova 应用程序,当该事件触发时,将window.location.href
设置为远程站点,例如http://foo.bar.com/lander.html
。从那个页面,我有几个到其他页面的链接——比如page1.html
和page2.html
。我想在page1.html
中添加一个按钮,调用Cordova 的navigator.notification.vibrate
函数。
我已经进行了上述设置,并且一切似乎都可以正常工作,除了当我单击 page1.html
中的按钮以尝试让设备振动时,navigation.notification
未定义。我已将cordova.js
复制到foo.bar.com
并从page1.html
引用它。我必须在foo.bar.com
上包含其他javascript 源文件吗?这种方法会奏效吗?
如果我不更改窗口位置,而是通过 AJAX 获取内容并将内容放在位于 Cordova 应用程序基础的 index.html
页面中的 div 容器中,它会起作用吗?
如果重要的话,这一切都在 ios 上。我只包含了dialogs
和vibration
插件。我在 Cordova 应用程序中收到 deviceready
事件并成功重定向到远程站点。请让我知道是否还有其他我需要考虑的因素。谢谢。
更新 1:我通过使用 navigator.vibrate 而不是 navigator.notification.vibrate 从 Cordova 应用程序的本地 index.html 获得了振动。在远程站点上更改此设置没有帮助。我还尝试从远程页面包含振动.js、Cordova.js 和 cordova_plugins.js 的副本 - 仍然没有运气。
更新 2:我在 Cordova 文档中找到了我要询问的内容:从远程加载的 HTML 页面(未本地存储在设备上的 HTML 页面)调用 Cordova JavaScript 函数是不受支持的配置。这是因为 Cordova 不是为此而设计的,Apache Cordova 社区没有对此配置进行测试。虽然它可以在某些情况下工作,但不推荐也不支持。同源策略存在挑战,保持 JavaScript 和 Cordova 的本机部分在同一版本同步(因为它们通过可能更改的私有 API 耦合),调用本机本地函数的远程内容的可信度,以及潜在的应用商店拒绝.
应使用 Cordova 的 InAppBrowser 在 web 视图中显示远程加载的 HTML 内容。 InAppBrowser 的设计使得运行在那里的 JavaScript 无法访问 Cordova JavaScript API,原因如上所述。请参阅安全指南。
基于此,这听起来可能,但就像我们自己出去一样。不过,如果有人成功地做到了这一点,我们愿意试一试。
【问题讨论】:
如你所说,这是一个不受支持的配置,不推荐。无论如何,如果您将整个平台/ios/www 文件夹上传到服务器,它应该可以工作 我正在尝试实现同样的目标,但到目前为止还没有运气。如果我想访问本机功能,它是否仍然不受支持并且唯一的“好”选择是捆绑整个应用程序? @IlyaChernomordik 我们最终通过在运行时从服务器动态请求 JS 得到了一些工作。如果我记得,它涉及一些技巧,即向页面添加脚本元素以及与 IMG 标记有关的一些东西。 YMMV。 @Patrick87 非常感谢这个技巧,我可能会尝试做类似的事情。我没有想到这个解决方案,但我所有的应用程序都是一个角度文件,所以我可以直接从应用程序中轻松获取它,而从技术上讲,app
本身将保留在设备上,整个应用程序将只是index.html
。非常感谢您的帮助,这实际上应该是我会赞成的答案。否则可以做一个自动更新的应用程序,但这对我的任务来说太复杂了。
【参考方案1】:
我认为您正在寻找的是推送通知。有一个插件。 http://ngcordova.com/docs/plugins/pushNotifications/ 不过,您需要在您的应用程序上运行一个任务。
希望这会有所帮助。
【讨论】:
感谢您的回复!我不确定这就是我们想要的。以上是关于Cordova - 从远程 HTML 访问设备功能的主要内容,如果未能解决你的问题,请参考以下文章
Cordova+vue 混合app开发创建Cordova项目
Cordova+vue 混合app开发创建Cordova项目
如何在 android 中远程更新我的 cordova/phonegap 移动应用程序?