2012-02-01 10 views
7

Tôi có trang web dành cho điện thoại di động bao gồm iframe có liên kết mở trong mục tiêu chính.Javascript ngừng thực thi trong khung nội tuyến sau khi nhấn nút quay lại trong safari di động

Trong Safari trên iOS 5.0.1, khi người dùng nhấp vào liên kết, sau đó sử dụng nút quay lại để quay lại trang, javascript sẽ ngừng thực thi trong khung nội tuyến.

Một bản demo đơn giản để minh họa cho vấn đề:

Nhấp vào liên kết, xác nhận cảnh báo và sử dụng nút quay lại. Lần thứ hai bạn nhấp vào liên kết mà cảnh báo sẽ không hiển thị.

index.html:

<html> 
    <body> 
    <iframe src="iframe.html"></iframe> 
    </body> 
</html> 

iframe.html:

<html> 
    <body> 
    <a target="_parent" onclick="alert('Click')" href="http://www.google.com"> 
     Link 
    </a> 
    </body> 
</html> 

Tôi đang chạy ra khỏi ý tưởng về những gì có thể gây ra điều này. Có ai chạy vào điều này không?

Trả lời

2

Tôi đã gặp sự cố tương tự. Dường như Safari của Safari chụp nhanh trang và khi bạn quay trở lại với nó bằng cách sử dụng nút quay lại, nó tải rằng ảnh chụp và mã javascript không được thực thi.

Có vẻ như có liên quan đến vấn đề này: http://www.mac-forums.com/forums/internet-networking-wireless/257631-safari-ipad-back-button-generates-old-info.html

Rất khó chịu. Tôi chưa tìm được giải pháp nào.

2

séc ra câu trả lời cho Problems with Page Cache in iOS 5 Safari when navigating back/unload event not fired.

Câu trả lời mà làm việc đối với tôi là phải làm như sau:

<body onunload=""> 
... 
<script type="text/javascript"> 
if ((/iphone|ipod|ipad.*os 5/gi).test(navigator.appVersion)) { 
    window.onpageshow = function(evt) { 
    // If persisted then it is in the page cache, force a reload of the page. 
    if (evt.persisted) { 
     document.body.style.display = "none"; 
     location.reload(); 
    } 
    }; 
} 
</script> 
+0

FYI - điều này không hoạt động nếu bạn áp dụng điều này để trang bên trong iframe, nó phải là trên trang tổng thể lưu trữ các iframe . Hoặc, có thể do iframe của tôi thực sự được nhúng trong iframe khác. Có, tôi đang sử dụng một thành phần của bên thứ ba. – kamranicus

+1

Có, điều này chắc chắn cần phải có trên trang bao gồm khung nội tuyến. – DrewB