IOS session storage

17 浏览
0 Comments

IOS session storage

我在我的代码中遇到了一些问题。我的Web应用程序运行在AngularJs 1.5上。我有一个带有购物车的网店。问题是应该保存在sessionStorage中并在更新浏览器后恢复的数据在桌面浏览器上正常工作,但在iOS上完全不工作(测试了Chrome和Safari)。Android(Chrome)也正常工作。在MacOS Safari中检查来自iPhone的代码时,控制台没有抛出任何错误。以下是代码:

(function(angular,loc){

var app = angular.module('myModule',['ui.bootstrap','ui.mask'])

app.run(function($rootScope){

window.onbeforeunload = function(event){

$rootScope.$broadcast('savestate');

};

});

app.factory('basket',['$rootScope',function($rootScope){

var basketData = {

content:[]

};

function saveState(){

sessionStorage.basket = angular.toJson(basketData.content);

}

function restoreState(){

basketData.content = angular.fromJson(sessionStorage.basket);

}

$rootScope.$on("savestate",saveState);

if(sessionStorage.basket)restoreState();

return basketData;

});

...

})(angular,window.location);

0
0 Comments

在iOS Safari上,存在一个问题,即不支持beforeunload事件。解决这个问题的方法是使用pagehide事件。

在iOS Safari浏览器中,beforeunload事件是在用户离开页面之前触发的。通常,开发人员可以使用这个事件来执行一些清理操作,比如保存用户输入的数据或者提示用户是否要离开页面等。然而,iOS Safari浏览器不支持beforeunload事件,这就导致了一些问题。

为了解决这个问题,可以使用pagehide事件。pagehide事件是在用户离开页面之前触发的,类似于beforeunload事件。通过使用pagehide事件,开发人员可以执行与beforeunload事件相同的清理操作。

下面是一个示例代码,演示了如何使用pagehide事件:

window.addEventListener("pagehide", function(event) {
    var confirmationMessage = "是否要离开此页面?";
    event.returnValue = confirmationMessage;
    return confirmationMessage;
});

在这个示例中,当用户离开页面之前,会触发pagehide事件。在pagehide事件的处理程序中,可以执行一些清理操作,并设置一个确认消息。这个确认消息将在用户尝试离开页面时显示给用户。用户可以选择继续留在页面或者离开页面。

通过使用pagehide事件,可以在iOS Safari上模拟beforeunload事件的功能,解决了iOS Safari不支持beforeunload事件的问题。这样,开发人员就可以在iOS Safari上执行与beforeunload事件相同的操作了。

0