2016-03-13 12 views
6

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 appcachelocalStorage. 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.

  1. 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
  2. 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?

+1

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

+0

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

Trả lời

-1

Tại sao bạn không thể sửa đổi tệp appCache .manifest của mình? Cung cấp tệp trống hoặc liên kết rác hoặc một số trang giả, chỉ để nhận tệp .manifest mới được chấp nhận và tệp cũ phải là lịch sử.

+0

Yup. Đã thử điều đó. Vấn đề ở đây là FF thậm chí không cố gắng tìm nạp tệp kê khai nhưng nó vẫn đang sử dụng appcache đã lỗi thời. Tôi đã cố gắng làm cho nó rõ ràng trong câu hỏi của tôi khi tôi viết: _Sadly Firefox thậm chí không cố gắng để GET một biểu hiện để kiểm tra nếu appcache cũ là đến nay._ Nó không quan trọng những gì máy chủ sẽ có phản ứng, nếu yêu cầu không bao giờ gởi. – pirxpilot

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