Tôi đang làm việc trên trip planning application được sử dụng để triển khai hỗ trợ ngoại tuyến với sự kết hợp của appcache
và localStorage
. Ngay khi Service Worker trở thành một lựa chọn khả thi, chúng tôi bắt đầu sử dụng nó. Quá trình chuyển đổi không gặp trục trặc trong Chrome (Chromium, Opera, v.v.) nhưng Firefox (cả 44 và 45) đang đặt ra một số vấn đề: Firefox đăng ký nhân viên dịch vụ mới nhưng sill tải các trang trong phạm vi của nó từ appcache lỗi thời.Có một chiến lược được đề xuất để di chuyển từ appcache sang ServiceWorker trong Firefox
Nói cách khác, nếu bạn may mắn không bao giờ gặp phải trang web của chúng tôi, và nếu bạn mở nó lần đầu tiên trong FF 44/45, bạn sẽ có một nhân viên phục vụ sáng bóng mới chăm sóc tất cả các nhu cầu ngoại tuyến của bạn. Cuộc sống thật tuyệt vời.
Tuy nhiên, nếu bạn gặp khó khăn khi sử dụng Firefox trước khi Service Worker được bật, bạn vẫn có phiên bản cũ hơn của trang web trong appcache của bạn.
- bạn đi đến trang chào mừng - người lao động dịch vụ được kích hoạt và nó (được cho là) sẽ chăm sóc xử lý tất cả mọi thứ cho toàn bộ phạm vi
- bạn đăng nhập, mà chuyển hướng bạn một trong những trang trong phạm vi SW (/ ui) - nó vẫn nên được xử lý bởi nhân viên dịch vụ, nhưng thay vào đó Firefox đột nhiên nhận ra rằng nó có appcache cũ và thậm chí không cố tải bất cứ thứ gì từ mạng nó tải nội dung cũ từ appcache
Tôi sẽ OK với điều đó (alhough đọc của tôi của Mozilla docs nói với tôi rằng appcache nên được bỏ qua trong phạm vi con trolled bởi service worker) nếu điều đó chỉ xảy ra một lần. Đáng buồn thay, Firefox thậm chí không cố gắng để GET một biểu hiện để kiểm tra nếu appcache cũ được cập nhật. Nếu nó đã cố gắng để GET biểu hiện, nó sẽ nhận được 404, mà sẽ vô hiệu hóa appcache (như nó đã làm trên Chrome). Tôi không thấy bất cứ điều gì giống như vậy trên dây (hoặc ở phía máy chủ).
Để thêm sự xúc phạm vào giao diện điều khiển Firefox bị thương tự hào: API bộ nhớ cache ứng dụng (AppCache) không còn được dùng nữa và sẽ bị xóa vào một ngày trong tương lai. Vui lòng xem xét sử dụng ServiceWorker để hỗ trợ ngoại tuyến. :-)
Làm mới đơn giản (F5) sẽ tải phiên bản hiện tại của trang thông qua nhân viên dịch vụ. Đáng buồn thay, nó chỉ hoạt động một lần. Sau khi đóng và mở lại tab, toàn bộ bản nhạc sẽ tự phát lại: nhân viên dịch vụ sẽ chăm sóc tất cả các trang trong phạm vi ngoại trừ những người đã từng khai báo khai báo appcache.
Xóa bỏ appcache (appcache clear
trong bảng điều khiển của nhà phát triển hoặc thông qua Cài đặt giao diện người dùng) khắc phục tình huống, nhưng tôi không thể đề xuất nó cho tất cả người dùng Firefox của chúng tôi.
Tôi đã cố gắng tìm một cái gì đó Firefox bugzilla mà không có nhiều may mắn. Nếu ai đó có thể tìm thấy một vấn đề có liên quan sẽ tuyệt vời. Hiện tại chúng tôi chỉ cần tắt hỗ trợ SW cho Firefox.
Có cách nào báo hiệu cho Firefox không nên bỏ qua appcache cũ khi trong phạm vi Service Worker?
Về lý thuyết, Firefox bỏ qua AppCache nếu một Nhân viên dịch vụ được đăng ký, xem [1] và [2]. Bạn có chắc chắn nhân viên dịch vụ đang kiểm soát trang không? [1]: https://bugzilla.mozilla.org/show_bug.cgi?id=1163545 [2]: https://www.fxsitecompat.com/en-CA/docs/2015/application-cache- api-has-deprecated/ – Marco
Yup. Về lý thuyết nó nên. Tôi chắc chắn rằng Service Worker đang hoạt động: Tôi có thể nhìn thấy đăng ký trong 'about: serviceWorkers' (ngoài kiểu lừa F5 làm việc và thực tế mọi thứ hoạt động khi tôi xóa appcache). Tôi đoán rằng mấu chốt của vấn đề là nó không kiểm soát trang ** mặc dù ** đang hoạt động trong phạm vi trang. Nếu tôi tìm ra cách viết một bản demo đơn giản cho điều đó, tôi sẽ làm điều đó: vấn đề là nó chỉ hiển thị khi bạn nâng cấp từ 'appcache' thành' service worker' trong cùng một trình duyệt. – pirxpilot