【问题标题】:Problems with window.history using JQuery/Javascript on Cordova app in IOS9在 IOS9 的 Cordova 应用程序上使用 JQuery/Javascript 的 window.history 问题
【发布时间】:2025-12-29 03:05:06
【问题描述】:

我在使用 IOS9(测试版)下的 Cordova 应用程序时遇到问题。我正在使用最新的 Cordova 和 JQuery 移动版本。 window.history 没有得到更新,导致以下故障:

  • window.history.go(-1) 无法返回页面
  • window.history.length 停留在 1,即使您浏览三页深度也是如此
  • 在 jQuery 中标记为 data-rel="back" 的链接在按下时无法返回

我整理了以下示例代码,当在 IOS9(beta) 下作为单独的 Cordova 应用程序运行时会失败,但如果您从 IOS9(beta) 浏览器运行它则可以正常运行(下面的链接)。它从移动浏览器运行但不是作为应用程序运行的事实让我相信这可能是 Cordova 问题。

在示例中 - 有三个页面。从 Home->Options->HopOpts 导航,然后点击取消按钮应该会让我们返回一个页面,但不会在 cordova 应用程序中。我已经分别尝试将按钮处理程序附加到该按钮并确认 window.history 的深度为 1(应该为 3)并且 window.history.go(-1) 无法向后移动。

示例 HTML 文件在这里:http://home.jejaju.com/BeerSmith2.html

要将其作为应用程序在 Cordova 下运行,您需要删除顶部附近“Cordova.js”行周围的注释块。正如我在上面指出的,它在浏览器中可以正常工作,即使在 IOS9 浏览器上也是如此,但作为独立的 cordova 应用程序,取消按钮会失败。

所以问题是有没有人知道为什么 window.history 没有更新并且反向链接对于这个简单的 Cordova 应用程序和 IOS9(beta) 不能正常工作?两个测试用例中唯一改变的是 Cordova.js。

【问题讨论】:

  • 您似乎遇到了此处跟踪的问题:github.com/jquery/jquery-mobile/issues/8293 尝试将您的设备更新到 iOS 9.2(几天前刚刚发布)。 iOS 更新似乎为我解决了这个问题 - 以及该问题跟踪器中的其他人。

标签: javascript jquery ios cordova ios9


【解决方案1】:

我知道这是几周前的事情,但我会发布这个以防其他人遇到它。听起来它可能与 iOS 9 中哈希更改生成的导航事件有关。如果是这样,您可以将其添加到 index.html 以禁用哈希监听:

(需要在 jquery.js 和 jquery.mobile-1.4.5.js 之间切换,如此处所示)

<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
<script type="text/javascript">
  $(document).bind("mobileinit", function(){
      $.mobile.hashListeningEnabled = false;
  });
</script>  
<script type="text/javascript" charset="utf-8" src="js/jquery.mobile-1.4.5.js"></script>

【讨论】:

  • 非常感谢。它解决了问题
  • 谢谢,拯救了我的一天。我在其他解决方案上发现了 hashListeningEnabled 东西,但重要的是:它应该在 jquery.js 和 jquery.mobile-1.4.5.js 之间。
  • 只希望能够轻松检测到 iOS 9。
  • 这个问题似乎在 iOS 9.2 中得到了修复——其他几个人也报告了这一点:github.com/jquery/jquery-mobile/issues/8293
【解决方案2】:

您好,您可以使用以下代码来解决此问题。

 <a href="#" onClick="goBack();">
     Back To Previous Page
 </a>
<script>
    function goBack() {
        event.preventDefault();
        window.location.href = document.referrer;
        return false;
    }
</script>

希望对你有帮助:)

【讨论】: