2010-07-19 31 views
11

Tôi có một ứng dụng web iPhone sử dụng tệp kê khai bộ nhớ cache để hoạt động ngoại tuyến. Tôi thêm webapp vào màn hình chính của tôi, sử dụng nó (nói di chuyển đến một vị trí nhất định trên một trang), sau đó quay trở lại màn hình chính. Khi tôi mở lại ứng dụng, trong một thời gian ngắn, tôi thấy nơi tôi từng ở (ở vị trí được cuộn trên trang đó), nhưng sau đó ứng dụng "tải lại" và tôi được cuộn lên đầu trang chính. Có cách nào để ngăn chặn điều này "tải lại"? Điều này xảy ra ngay cả trong chế độ trên máy bay (nghĩa là mọi thứ đang hoạt động trong bộ nhớ cache).Ngăn chặn ứng dụng web iPhone được lưu trong bộ nhớ cache tải lại (di chuyển lên trên)

+0

Điều này luôn làm phiền tôi trong ứng dụng Safari thông thường, nó luôn cố gắng tải lại trang trước ... – Fosco

Trả lời

3

Bạn chỉ cần nhìn thấy những hình ảnh khởi động mặc định, mà chỉ là một ảnh chụp màn hình của nơi cuối cùng bạn đang ở. Nó không phải là "nạp lại"; ứng dụng không được tải để bắt đầu.

Tìm kiếm "apple-touch-startup-image" để đặt hình ảnh tải thực.

+0

Ah, vậy có phải ảo tưởng rằng trạng thái tôi rời khỏi ứng dụng đã được ghi nhớ không? Không có cơ hội thực sự lưu trữ vị trí di chuyển ngay trước khi đóng? –

+0

Bạn có thể lưu nó vào localStorage chính mình: khi bạn nhận được onscroll, thiết lập lại một bộ đếm thời gian 250ms; khi bộ đếm thời gian hết hạn, hãy lưu vị trí cuộn, có thể liên quan đến neo gần nhất để tính toán cho việc thay đổi trang. Khôi phục khi tải. Chỉ làm bất kỳ điều này khi window.navigator.standalone là đúng. –

0

// trên tải

window.scroll(0,0); 

Để đảm bảo không có nội dung cũ sẽ được hiển thị trong khi tung ra tôi sử dụng này trong trang của tôi:

window.addEventListener ('dỡ bỏ', function() {$ (' body '). hide();});

Vì vậy, trạng thái cuối cùng của trang trống và là những gì được hiển thị cho người dùng khi trang được mở lại.

+1

Cũng là một ý tưởng hay để đảm bảo ứng dụng đang sử dụng các tệp mới nhất từ ​​tệp kê khai bộ nhớ cache: window.applicationCache.addEventListener ( 'updateready', function() { window.applicationCache.swapCache(); window.location.reload (true); }, sai ); – Espen

1

Tôi không tin có sự kiện 'tải lại' thực sự. onload và onunload là tất cả những gì chúng tôi nhận được.

Bộ xử lý onload khởi động như thể đây là lần đầu tiên bạn đến trang.

Bộ xử lý onunload là chìa khóa để xóa nội dung cũ.

Tôi muốn cung cấp nội dung thay thế cho những người quay lại ứng dụng web của tôi.

window.onunload=function(){ 
    document.getElementsByTagName('body')[0].className+=' unloading' 
} 

Và để cho CSS thực hiện công việc bẩn để ẩn phần lớn nội dung và hiển thị nội dung thay thế.

(câu trả lời này không dựa trên jQuery hoặc các khuôn khổ khác)

2

Điều tôi đang gặp phải ở đây là ứng dụng thực sự dường như "ở trong bộ nhớ" lâu hơn nếu tôi sử dụng Safari thông thường thay vì chạy trong chế độ "táo-di động-web-ứng dụng có khả năng". Trong trường hợp sau, một cái gì đó đơn giản như nhấn nút home, sau đó chuyển đổi nhiệm vụ trở lại ứng dụng sẽ gây ra tải lại. Làm điều tương tự trong Safari thường không tải lại. Vì vậy, tôi tồi tệ hơn bằng cách sử dụng "táo-di động-web-ứng dụng có khả năng".

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