Angular:使用 $window.history.back() 在 iOS 上并不总是有效

Posted

技术标签:

【中文标题】Angular:使用 $window.history.back() 在 iOS 上并不总是有效【英文标题】:Angular : using $window.history.back() doesn't always work on iOS 【发布时间】:2017-05-30 13:44:18 【问题描述】:

我们有一些 ios 客户端抱怨我们在 AngularJS 应用程序中实现的“返回”按钮并不总是有效。后退按钮只是一个执行$window.history.back() 的图像。我读过使用 window.history.go(-1) 是首选,但这不是 Angular 方式。

有谁知道$window.history.back 在iOS 中有什么问题吗?如果是这样,在AngularJS 中实现这一点的正确方法是什么?

【问题讨论】:

Cordova - window.history.back() not working on html back button in iOS 9的可能重复 我正在使用 angular#1.5.1,遇到相同的 ios 问题,$window.history.go(-1) 在 ios 10.2.1 中不起作用 我们最终从我们的应用程序中删除了 window.history.back() 并以另一种方式解决了它。检查这个问题:***.com/questions/16635381/…。如果发生“stateChangeSuccess”,我们会将“fromState”(= 前一个状态)存储在一个变量中,然后在单击后退按钮时使用 $state.go(vm.fromState) 返回上一页。这对我们非常有效。 【参考方案1】:

我们的 web wrapper 应用程序有一个非常相似的问题(webview 指向一个 iframe)。

我们的“后退按钮”是对history.back(1); 的简单调用。

在苹果设备上通过 UIWebView 加载时工作完美。

我们注意到,一旦我们开始导航 2 个或更多跃点进入该站点,该按钮就会起作用。

我发现最简单的方法是在$(document).ready 的末尾设置半秒的页面点击超时。

setTimeout(function() 
        $(".nav-home-logo").click();
, 5000);

我们已经有一个 .nav-home-logo 的 onclick 事件调用:

$("iframe").attr("src", "https://your.website.here?foo=" + Math.random());

缓存破坏器似乎有帮助。

我相信它与here 描述的问题有关。

【讨论】:

以上是关于Angular:使用 $window.history.back() 在 iOS 上并不总是有效的主要内容,如果未能解决你的问题,请参考以下文章

公众号h5开发函数:执行关闭浏览器窗口,返回公众号首页

如何使用 @angular/upgrade 在 Angular 1 应用程序中使用 Angular 2 组件

使用 Angular CLI 的 Angular 2 材质

angular使用cordova混合开发

如何降级使用 angular2 编写的自定义管道以在 angular 1.5 中使用?

Angular 2 - 如何使用新的 Angular 2.0.0-rc.1 路由器