2016-06-28 33 views
8

Chúng tôi có ứng dụng góc (SPA) duy trì phiên người dùng phía máy khách (thời gian chờ phiên, thời gian không hoạt động, v.v.). Phiên được sử dụng để buộc người dùng phải đăng nhập lại khi phiên hết hạn vì một lý do nào đó.Firefox không cập nhật trang chính xác khi trạng thái thay đổi khi không hoạt động

Hết hạn phiên được kiểm soát bởi dịch vụ chuyên dụng, phát sóng sự kiện trên $ rootScope khi phiên chấm dứt, khóa hoặc thay đổi trạng thái.

Chúng tôi thêm người nghe vào các sự kiện thay đổi trạng thái phiên làm thay đổi định tuyến đến trang có liên quan (trang đăng nhập, trang mở khóa, v.v.). Chúng tôi đang sử dụng angular-ui-router cho định tuyến. Tuy nhiên, điều này hoạt động tốt, đặc biệt trong Firefox, nếu thay đổi trạng thái phiên diễn ra khi cửa sổ trình duyệt/tab không hoạt động (ví dụ: thu nhỏ, ở chế độ nền, v.v.), trang không được làm mới đúng cách. Nói cách khác, bạn có thể thấy các điều khiển của trang mới (ví dụ: trường văn bản tên người dùng và trường mật khẩu), nhưng thay vì nhìn thấy nền của trang mới, bạn sẽ thấy trang cũ.

Nó hoạt động hoàn hảo trong Chrome và IE, chúng tôi chỉ thấy sự cố này trên Firefox. Hơn nữa, khi cửa sổ trình duyệt/tab đang hoạt động, nó cũng hoạt động hoàn hảo trên Firefox.

Mọi suy nghĩ?

Trả lời

1

Hãy để nó theo cách khác. Không sử dụng phát sóng rootScope, chỉ cần dùng var trong dịch vụ của bạn với trạng thái hiện tại và trả về hàm với giá trị này.

var userSession = 'Expired'; 

return { 
    getSessionState: function() { 
     return userSession; 
    } 
} 

và xem trong bộ điều khiển của bạn. Vì vậy, lần chạy đầu tiên sẽ chuyển đổi chế độ xem sang chế độ xem bạn cần ngay bây giờ.

$scope.$watch(function() { 
    return yourServiceName.getSessionState() 
}, function (val) { 
    //you can check the val here and change the route 
}); 

Nếu đây không giúp, hãy chắc chắn rằng bạn sử dụng $ timeout (timeout Angulars có nguồn gốc sử dụng tiêu hóa) và không có bất kỳ thời gian chờ bộ (timeout JS được dừng lại khi cửa sổ trình duyệt/tab không hoạt động và hơn lửa tất cả cùng một lần khi tab được lấy nét một lần nữa, những gì có thể kết thúc với hành vi lạ trong Angular).

Các vấn đề liên quan