我们使用PhoneGap来使用移动设备的本机功能。内部如何运作?我们如何从JavaScript方法访问PhoneGap的实现类?有人可以解释一下吗?
答案 0 :(得分:9)
我对Cordova iOS如何将消息传递给WebView进行了一些探讨。这是将消息从iOS传递到JavaScript的方法。
UIWebView
类有一个名为stringByEvaluatingJavaScriptFromString
的方法。
如果您查看iOS Cordova项目中的某些文件,他们会将JavaScript作为要执行该字符串的字符串传递,例如: CDVPlugin.m
我不知道iOS是否编写了一个新的DOM节点(类似<script>alert('from iOS');</script>
),或者它是否通过Safari中的特殊钩子执行JavaScript。我相信后面的,上面引用的文档说:
每个顶级入口点的JavaScript执行时间限制为10秒。如果脚本执行的时间超过10秒,则Web视图将停止执行脚本。这很可能发生在代码中的随机位置,因此可能会产生意外后果。强制执行此限制是因为JavaScript执行可能导致主线程被阻塞,因此当脚本运行时,用户无法与网页进行交互。
JavaScript分配也限制为10 MB。如果您超过JavaScript的总内存分配限制,则Web视图会引发异常。
我不知道如果没有对UIWebView内部状态的一些特殊访问权限,他们如何实际施加这些限制,所以我怀疑他们只是插入一个新的DOM节点。
答案 1 :(得分:5)
我不完全确定,但是here is the information tutorial。这是一个很好的起点。
答案 2 :(得分:4)
源代码是公开可用的,因此可以检查它是如何实现的,这在每个平台上都是不同的,因此您无法获得涵盖所有操作系统的单一答案。 在iOS上,它使用UIWebView完成,其中可以通过使用专有URL方案强制浏览器位置更改来调用本机代码。此更改导致调用本机代码中的方法,该方法可以检查url方案并传递参数,然后关闭并执行一些相关处理。然后有一种从iOS中的Objective-C调用Javascript的方法,可以用来将结果传递回Javascript方面。
整个详细过程太长,无法在此处回答。
当然,它在其他平台上的实现方式有所不同。
这种机制可以在API后面抽象出来,以便PhoneGap应用程序不会意识到特定平台实现细节的差异。
为什么不在PhoneGap论坛上询问,或者如果您需要大量详细信息,请查看源代码。
答案 3 :(得分:0)