Phonegap是如何工作的?

17

我们使用 PhoneGap 来利用移动设备的本地能力。它内部是如何运作的?我们如何从 JavaScript 方法中访问 PhoneGap 的实现类?能有人解释一下吗?


1
我预计他们使用了WebView,因此他们正在使用在移动应用程序内运行的HTML / javascript,因此这不仅仅是一个移动Web应用程序。 - James Black
4个回答

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节点。

最新版本的PhoneGap是否也不使用NSUrlProtocol和WKWebView? - Akash Kava
我不知道,这个答案已经三年了。你可以在Github上找一下。 - weisjohn

5

4
源代码是公开可用的,因此可以进行检查以了解其实现方式,在每个平台上都有所不同,因此您无法得到一个单一答案来涵盖所有操作系统。在 iOS 上,它使用 UIWebView 完成,其中可以通过强制浏览器位置更改使用专有 URL 方案来调用本地代码。这种更改会导致本地代码中的一个方法被调用,该方法可以检查 URL 方案和传递的参数,然后开始进行一些相关处理。然后,还有一种在 iOS 中从 Objective-C 调用 Javascript 的方法,可以用于将结果传回到 Javascript 部分。
整个详细过程在此处的答案中描述起来太长了。
当然,其他平台上的实现方式也是不同的。
这种机制可以抽象出一个 API,以便 PhoneGap 应用程序不会意识到特定平台实现细节的差异。
如果您需要大量细节,请为什么不在 PhoneGap 论坛上询问或查看源代码呢?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接