2015-02-10 76 views
4

以下代碼允許用戶停止發生元刷新 - 併成功從頁面中刪除meta refresh,但瀏覽器仍會刷新頁面。任何想法如何使其工作?我可以使用javascript停止元刷新嗎?

<!doctype html> 
<html> 
<head> 
<title>Test</title> 
<meta charset="UTF-8" /> 
<meta http-equiv="refresh" content="5" id="refresh" /> 
<script src="//code.jquery.com/jquery-1.11.2.min.js"></script> 
<script type="text/javascript"> 
$(function(){ 
    $("a").click(function(e){ 
    e.preventDefault(); 
    $("#refresh").remove(); 
    }); 
}); 
</script> 
</head> 
<body> 

Reloaded at <span id="time"></span> 
<script> 
document.getElementById("time").innerHTML = Date(); 
</script> 

<a href="#">Stop refresh</a> 


</body> 
</html> 

編輯:因爲這個問題,希望對用戶不支持JavaScript的後備解決方案,這是從this question不同 - 這不是我的情況下(大部分回答這個問題並不適用於這個問題)。

+0

不能,元標記已在頁面加載時解析,任何對此的更改都會被忽略。 – Teemu 2015-02-10 15:52:30

+0

我沒有你的問題的答案,但我可以問爲什麼meta刷新首先使用? – aaronk6 2015-02-10 15:52:42

+0

撇開:http://www.w3.org/TR/WCAG10-CORE-TECHS/#auto-page-refresh – 2015-02-10 15:58:55

回答

4

我不認爲你能做到這一點,因爲頁面加載時瀏覽器會讀取標題,瀏覽器將計劃刷新。我不認爲瀏覽器給你一種取消方法,因爲它實際上是一個HTTP頭,而不是文檔的一部分。最好爲body元素添加一個onload處理程序,該處理程序使用計時器來安排刷新,然後讓您的點擊處理程序取消計時器。

<script type="text/javascript"> 
$(function(){ 
    var timer; 

    $('body').on('load', function() { 
     timer = setTimeout(refresh, 5000); 
    }); 

    $("a").click(function(e){ 
    e.preventDefault(); 
    if (timer) { 
     clearTimeout(timer); 
     timer = null; 
    } 
    }); 

    function refresh() { 
     timer = null; 
     document.location.reload(true); 
    } 
}); 
</script> 
1

因爲在加載頁面時重載是triggert,所以您無法通過javascript以後刪除標題。但延遲5秒。

相反,你可以改變思維方式和使用JavaScript,而不是meta標籤重新加載頁面:

<!doctype html> 
<html> 
<head> 
<title>Test</title> 
<meta charset="UTF-8" /> 
<script src="//code.jquery.com/jquery-1.11.2.min.js"></script> 
<script type="text/javascript"> 
var timer = setTimeout(function() { 
    window.location = window.location; 
}, 5000); 
$(function(){ 
    $("a").click(function(e){ 
    e.preventDefault(); 
    clearTimeout(timer); 
    }); 
}); 
</script> 
</head> 
<body> 

Reloaded at <span id="time"></span> 
<script> 
document.getElementById("time").innerHTML = Date(); 
</script> 

<a href="#">Stop refresh</a> 


</body> 
</html> 
5

只是爲了保持完整性,而不是我推薦的方式。您可以撥打:

window.stop(); 

停止加載窗口。 Internet Explorer不支持這一點,你必須這樣:

document.execCommand("Stop"); 
+0

爲了調試目的,這對我非常有用。謝謝! – 2016-12-19 19:13:11

1

這個工作對我太好了! (在chrome中試過)

<button onclick="pauseshow()"><img id="myImg" src="images/pause.jpg" width="45" height="45" style="position:absolute; top:10px; left:1200px;" ></button> 
function pauseshow() 
{ 
    window.stop(); 
    // Below did not work --> 
    // var mr = document.getElementById("mymetatag"); 
    // mr.parentNode.removeChild(mr); 

} 
相關問題