jQuery / Cordova历史问题 - iOS 9历史崩溃了吗?

时间:2015-09-28 09:58:24

标签: javascript jquery ios cordova webkit

我正在处理一个应用程序。在我上周开始后,我添加了几页。今天我试图实现后退按钮,但是我失去了理智......现在我试着让它工作了四个小时但我无法做到,因为iOS 9中有一些奇怪的行为。

所以我的硬件设置可以更好地理解:

  • Mac Mini - OS X - Yosemite 10.10.5
  • iPhone 6S - iOS 9.0.1(13A405)
  • iPhone 6+ - iOS 9.0测试版(13A4305g)
  • iPhone 5 - iOS 9.0(13A344)
  • iPad 4 - iOS 8.3(12F69)

我的应用程序设置以便更好地理解:

  • Cordova在版本5.3.3
  • Cordova平台 iOS版本3.9.1
  • jQuery 2.1.4缩小
  • jQuery mobile 1.4.5 minified

问题

所以我想通过jQuery在我的应用程序中实现一个后退按钮。 Normaly的方式是添加href,其中包含data-rel="back"data-transition="reverse"等属性。所以我的代码看起来像这样:

index.html

<!DOCTYPE html>
<html>
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
    <link rel="stylesheet" type="text/css" href="css/index.css">
    <link rel="stylesheet" type="text/css" href="css/jquery.mobile.structure-1.4.5.min.css">

    <script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>
    <script type="text/javascript" src="js/jquery.mobile-1.4.5.min.js"></script>
    <script type="text/javascript" src="cordova.js"></script>
    <title>Hello World</title>
    </head>
    <body>
        <div data-role="page" id="page1">
          This is page 1<br />
          <br />
          <a href="#page2" data-transition="slide">
            Go to page 2
          </a>
        </div>

        <div data-role="page" id="page2">
          This is page 2<br />
          <br />
          <a href="#" data-rel="back" data-transition="reverse">
            Go back to page 1
          </a>
        </div>
    </body>
</html>

后退按钮在iOS 9和iOS 9.0.1中无效。在iOS 8.3中一切正常。那么这个问题有什么已知的吗?有人听说过吗?或者我完全错了,做错了什么?由于我无法在Android上测试它,如果有人能做到这一点会很棒。

http://codepen.io/anon/pen/vNyrgB

立即等待您的反馈...提前致谢!

2 个答案:

答案 0 :(得分:6)

目前存在许多问题,但如果是关于后退按钮导航和页面闪烁,则修复很简单:

$.mobile.hashListeningEnabled=false;

将其置于您的设备就绪事件中。

考虑到这会破坏Android后退按钮,所以当你的应用也应该在Android上运行时,你实际上应该只有条件地应用它。类似的东西:

if ( device.platform === "iOS" ) {
  $.mobile.hashListeningEnabled=false;
}

答案 1 :(得分:4)

@Sithys,
1)iOS9在很多地方都被打破了。 2)此外,周末 Phonegap Build 对默认版本进行了未经宣布的升级。

这是你需要知道的,但还有更多,我没有。

1。现在支持iOS9。

截至2015年11月2日,Cordova

支持iOS 9

Apache Cordova iOS 3.9.2
http://cordova.apache.org/announcements/2015/11/02/cordova-ios-3-9-2.html

## 1.不支持iOS9 YET! ##

PhoneGap构建iOS 9支持状态

  

此时,向Cordova Bug存储库报告了4个错误。您的问题不会出现在资源库中 - 截至此日期。

2。未设置编译器版本

来自 Phonegap Build 论坛,Petra Adds

  

我想补充一点:没有公告,PGB将默认PGB版本从3.7.0更改为cli-5.2.0。这导致所有未在config.xml中设置'phonegap-version'的人面临突然需要的泼水屏幕和白名单插件以及配置和HTML中的其他白名单规范。

     

此外,几个插件似乎无法使用cli-5.2.0正确构建,导致关于“Class ***。java”的日志文件错误消息。

FWIW: Phonegap Build admitted to as much in this tweet

来自Top Mistakes by Developers new to Cordova/Phonegap你已经点击了:

  • #6 未为您的编译器设置“phonegap版本”
  • #7 没有为您的插件设置“版本”
  • #10 未在config.xml中添加新的“white-list”和“white-list plugin”参数。

对于#6&amp; #7

  

使用CLI版本,如果您没有为您的平台分配版本,或者如果您未在config.xml中设置phonegap-version,则在“Phonegap Build”中,您将获得最新版本。如果运气好,您的程序就会按预期运行。如果你不幸运,你会得到一组级联错误。

     

幸运的是,对于我们所有人来说,Holly Schinsky写了一篇很好的博文来解释这一切:

     

Cordova / PhoneGap版本混淆
  http://devgirl.org/2014/11/07/cordovaphonegap-version-confusion/

#10

  

这个相对*新*要求意味着 - 要访问网络上的任何网站或资源,您必须使用白名单和白名单插件。如果您使用cordova-android@4.0.0或更高版本,此要求将生效;包括cli-5.1.1。但是,如果您的版本在4.0.0之前,请使用3.5.0或3.7.0,那么必须添加 white-list 要求。< / p>      

要明确的是,“白名单”已经存在了一段时间,但插件和要求非常新。正如您所料,当添加“白名单”时,不推荐使用事实上的开放访问功能。或者说另一种方式,事实上开放访问功能已被计划并计划被淘汰。此更改标志着删除开放访问功能的一个步骤。

     

此外,内容安全策略(CSP)已经吸引了众多开发人员 - 因为它的公开性很差。这个CSP需要进入您使用的每个HTML页面,就像您必须等待'deviceready'一样。该文档隐藏在许多最新文档页面的底部。

相关链接

  

Phonegap Build Forum:Notes for upgrading to cli-5.1.1 on PGB,现在需要白名单