Mobile Phonegap是如何工作的?

Mobile Phonegap是如何工作的?,mobile,cordova,hybrid,Mobile,Cordova,Hybrid,我们使用PhoneGap来使用移动设备的本机功能。它是如何在内部工作的?我们如何从JavaScript方法访问PhoneGap的实现类?有人能解释一下吗?我不能完全肯定,但是。这是一个很好的起点。源代码是公开的,因此可以检查它是如何实现的,这在每个平台上都是不同的,因此你无法得到一个涵盖所有操作系统的单一答案。 在iOS上,它使用UIWebView完成,在UIWebView中,可以通过使用专有url方案强制更改浏览器位置来调用本机代码。此更改导致调用本机代码中的方法,该方法可以检查url方案和传

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

我不能完全肯定,但是。这是一个很好的起点。

源代码是公开的,因此可以检查它是如何实现的,这在每个平台上都是不同的,因此你无法得到一个涵盖所有操作系统的单一答案。 在iOS上,它使用UIWebView完成,在UIWebView中,可以通过使用专有url方案强制更改浏览器位置来调用本机代码。此更改导致调用本机代码中的方法,该方法可以检查url方案和传递的参数,然后执行相关处理。然后,有一种在iOS中从Objective-C调用Javascript的方法,可用于将结果传递回Javascript端

整个详细过程太长,无法在这里给出答案

当然,它在其他平台上的实现方式是不同的

这种机制可以抽象为API,这样PhoneGap应用程序就不会意识到特定平台实现细节的差异


为什么不在PhoneGap论坛上提问,或者如果需要很多详细信息,可以查看源代码。

我对Cordova iOS如何将消息传递到WebView进行了一些探索。这是如何将消息从iOS传递到JavaScript的

该类有一个名为
stringByEvaluatingJavaScriptFromString
的方法

如果您查看iOS Cordova项目中的一些文件,它们将JavaScript作为一个字符串传递给该函数,该字符串将被执行,例如

我不知道iOS是写了一个新的DOM节点(类似于
alert('from iOS');
),还是通过Safari中的一个特殊钩子执行JavaScript。我相信后者,在这一点上,上面提到的文件说:

对于每个顶级入口点,JavaScript执行时间限制为10秒。如果脚本执行时间超过10秒,web视图将停止执行脚本。这可能发生在代码中的任意位置,因此可能会导致意外后果。施加此限制是因为JavaScript执行可能会导致主线程阻塞,因此当脚本运行时,用户无法与网页交互

JavaScript分配也被限制在10MB以内。如果JavaScript的总内存分配超过此限制,web视图将引发异常


我不知道他们如何在没有特殊访问UIWebView内部状态的情况下施加这些限制,所以我怀疑他们只是在插入一个新的DOM节点。

这也是一个很好的限制:

我希望他们使用网络视图,因此他们使用的是在移动应用程序中运行的HTML/javascript,因此它不仅仅是一个移动网络应用程序。即使是最新版本的PhoneGap也不使用NSUrlProtocol和WKWebView?我不知道,这个答案已经有3年了。你可以看看github。