Phonegap / Cordova 在 ios8 中不起作用

Posted

技术标签:

【中文标题】Phonegap / Cordova 在 ios8 中不起作用【英文标题】:Phonegap / Cordova not working in ios8 【发布时间】:2014-06-03 06:17:04 【问题描述】:

我试用了 ios 8 测试版,发现 Cordova/Phonegap 几乎坏掉了。

对我来说,现在主要是 InAppBrowser 没有出现。

你的经历是什么? 您有解决方案或解决方案的想法吗?

谢谢。

【问题讨论】:

因为它今天刚刚发布(在 beta 预览版中),而且 Cordova 是一个开源项目:等到社区发布关于它的信息。我敢肯定,在接下来的几个月里,将会有一个版本解决与 iOS8 的任何兼容性问题。如果您有任何特别的发现,请直接发布有关 Cordova/Phonegap 的问题,以帮助他们解决问题。 【参考方案1】:

您可以在 index.html 中使用一些 javascript 来解决这个问题(或安装 iOS 8 beta 2,这似乎已经解决了这个问题): https://gist.github.com/EddyVerbruggen/cd02c73162180793513e#file-ios8-beta-phonegap-fix

// temp fix for iOS8 beta, add it after the reference to cordova.js
// You don't actually require it for ios 8 beta 5
if (navigator.userAgent === undefined) 
  navigator.__defineGetter__('userAgent', function() 
    return("Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit");
  );

【讨论】:

官方 Cordova 错误报告 here。修复:git-wip-us.apache.org/repos/… 似乎已在 iOS 8 beta 2 中修复 :)【参考方案2】:

一个普通的cordova示例应用程序(例如“cordova create test”)可以正常加载。

如果你添加任何cordova插件你会在“iOSExec()”中遇到问题,参见“platform_www/cordova.js”:

bridgeMode = navigator.userAgent.indexOf(' 5_') == -1 ? jsToNativeModes.IFRAME_NAV: jsToNativeModes.XHR_NO_PAYLOAD;

将其更改为:

bridgeMode = jsToNativeModes.IFRAME_NAV;

您可以再次使用插件。这将破坏与 iOS 5 的向后兼容性,但我怀疑你今天会发现有人在运行 iOS 5 和 cordova...

如果您使用的是 fastclick.js 或backbone.js,您也必须进行一些小的修改。 只需按照 Safari 的 webinspector 中的错误消息即可。

【讨论】:

骨干网和快速点击需要做哪些改变?能详细点吗?【参考方案3】:

在早期的 iO​​S 8 Beta 中,Cordova/Phonegap 应用程序由于用户代理错误而被破坏,但根据iOS 8 Beta release notes(WebKit 部分),此错误已在 iOS 8 Beta 3 中正式修复。(实际上已经修复在 iOS 8 Beta 2 中。)

很高兴看到 Apple 已经测试了 Cordova/Phonegap 应用并修复了这个问题。一开始就存在这个错误有点令人失望,但早期的测试版总是有很多问题。

【讨论】:

“很高兴看到 Apple 已经测试了 Cordova/Phonegap 应用程序”请。如果没有报告该错误,他们可能不会注意到:bugs.webkit.org/show_bug.cgi?id=128303(事实上,它在 iOS 8 测试版发布之前就已报告,但仅在 iOS 8 b2 中得到修复) 还要注意它实际上是在 beta 2 中修复的。发行说明是错误的 :) 完全正确。相应地更新了发行说明部分。我试图让 Apple 从怀疑中受益,但如果他们真的做了一些 Cordova 测试,这是一个很大的错误,应该立即修复。我仍在为 iOS 7 中引入的一些 WebKit 渲染错误而苦恼,这些错误确实让 Cordova 开发让我头疼,所以 Apple 可能根本不会测试 Cordova 应用程序。我猜是一厢情愿的想法。 可能 :) 一点也不让我感到惊讶——他们自然希望推动完全原生的应用程序与竞争对手的操作系统区分开来。我不认为他们真的关心科尔多瓦一点。但是 Cordova 应用程序的错误是 WebKit 的错误,并且这些确实(最终)得到了修复。【参考方案4】:

将 XCode 更新到 Beta 2,它无需任何修复即可工作(使用 cordova 3.5.0 测试)。

您需要在 iOS 开发中心下载新版本的 XCode,因为自动更新还不能用于测试版..

【讨论】:

以上是关于Phonegap / Cordova 在 ios8 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Cordova / Phonegap 和 iOS 8.1 库路径

如何在 iOS 8 上的 Cordova / PhoneGap 应用程序中隐藏键盘表单附件栏? [复制]

通知不适用于 ios8 - Pushwoosh + phonegap

如何在iOS 8上的Cordova / PhoneGap应用程序中隐藏键盘表格附件栏? [重复]

Phonegap 3.8.0 & iOS8 状态栏

Phonegap/Cordova 中的本地通知