Làm mới trang một lần sau khi tải trang đầu tiên


84

Tôi muốn triển khai mã JavaScript nêu rõ điều này: nếu trang được tải hoàn toàn, hãy làm mới trang ngay lập tức, nhưng chỉ một lần. Tôi bị mắc kẹt ở "một lần duy nhất":

window.onload = function () {window.location.reload()}

điều này tạo ra một vòng lặp không có "chỉ một lần". jQuery được tải nếu điều này hữu ích.


1
Bạn đang đạt được gì bằng cách tải lại trang? Có thể có một cách tốt hơn để giải quyết vấn đề.
FishBasketGordo

có một tập lệnh thư viện toàn màn hình jquery bắt đầu trên trang, nhưng các ngón tay cái không bao giờ được tải hoàn toàn. nếu bạn nhấn nút "làm mới" cho trang, nó sẽ chỉ tải những trang còn lại ... vì vậy rõ ràng là tôi đang tìm kiếm một số loại giải pháp ... việc đưa ra các ngón tay cái riêng biệt là quá phức tạp (CMS), các bản sửa lỗi khác đã không Không thực sự giúp được gì ... Đó là khoảng 4 MB hình ảnh. 300kb mỗi cái, đến một lúc nào đó ngón tay cái của hình ảnh không được thay đổi kích thước và hiển thị nữa (hết giờ? Quá nhiều, quá lớn ??) nhưng trang tải xong.
Martin

Tôi đã gặp sự cố tương tự (javascrip không hoạt động) khi sử dụng pjax pjax.heroku.com .
Pratik Khadloya

Câu trả lời:


97

Tôi muốn nói sử dụng hàm băm, như thế này:

window.onload = function() {
    if(!window.location.hash) {
        window.location = window.location + '#loaded';
        window.location.reload();
    }
}

Vâng. tôi chỉ định gợi ý điều đó.
p3drosola

yeah, tương tự như đề nghị của tôi sử dụng một tham số $ _GET, nhưng một chút dễ dàng hơn vì truy cập vào băm trong JS là dễ dàng hơn truy cập vào $ _GET param ...
maxedison

4
Đây là cách đơn giản nhất miễn là chưa có hàm băm trong URL. Trong trường hợp đó, đọc một tham số GET sẽ tốt hơn.
David

Làm cách nào bạn có thể làm điều này mà không cần nối url?
zero_cool

giải pháp thông minh! yêu nó! ❤
anu

48

Khi tôi gặp sự cố này, tôi tìm kiếm ở đây nhưng hầu hết các câu trả lời đang cố gắng sửa đổi url hiện có. Đây là một câu trả lời khác phù hợp với tôi khi sử dụng localStorage.

<script type='text/javascript'>

(function()
{
  if( window.localStorage )
  {
    if( !localStorage.getItem('firstLoad') )
    {
      localStorage['firstLoad'] = true;
      window.location.reload();
    }  
    else
      localStorage.removeItem('firstLoad');
  }
})();

</script>

Giải pháp sáng tạo.
JoJo

@Haimei Thx rất nhiều __ / \ __
Pradeep kumar

30
<script type="text/javascript">
$(document).ready(function(){    
    //Check if the current URL contains '#'
    if(document.URL.indexOf("#")==-1){
        // Set the URL to whatever it was plus "#".
        url = document.URL+"#";
        location = "#";

        //Reload the page
        location.reload(true);
    }
});
</script>

Do điều kiện if mà trang chỉ tải lại một lần, tôi cũng gặp phải vấn đề này và khi tôi tìm kiếm, tôi đã tìm thấy giải pháp tốt này. Điều này phù hợp với tôi.


9

Kiểm tra Liên kết này, nó có chứa mã java-script mà bạn có thể sử dụng để làm mới trang của mình một lần

http://www.hotscripts.com/forums/javascript/4460-how-do-i-have-page-automatically-refesh-only-once.html

Có nhiều cách để làm mới trang của bạn:

giải pháp1 :

Để làm mới một trang mỗi khi nó mở ra, hãy sử dụng:

<head>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
</head>

sollution2:

<script language=" JavaScript" >
<!-- 
function LoadOnce() 
{ 
window.location.reload(); 
} 
//-->
</script>

Sau đó, thay đổi của bạn để nói

<Body onLoad=" LoadOnce()" >

giải pháp3:

response.setIntHeader("Refresh", 1);

Nhưng giải pháp này sẽ làm mới trang nhiều lần tùy thuộc vào thời gian bạn chỉ định

Tôi hy vọng điều đó sẽ giúp bạn


3

tôi đặt cái này bên trong thẻ head của trang mà tôi muốn tải lại một lần duy nhất:

<?php if(!isset($_GET['mc'])) {
echo '<meta http-equiv="refresh" content= "0;URL=?mc=mobile" />';
} ?>

giá trị "mc" có thể được đặt thành bất kỳ giá trị nào bạn muốn, nhưng cả hai đều phải khớp trên 2 dòng. và "= mobile" có thể là "= anythingyouwant" nó chỉ cần một giá trị để dừng làm mới.


3

Cuối cùng, tôi đã có một giải pháp để tải lại trang một lần sau hai tháng nghiên cứu.

Nó hoạt động tốt trên dự án JS phía khách hàng của tôi.

Tôi đã viết một hàm dưới đây chỉ tải lại trang một lần.

1) Lần đầu tiên nhận được thời gian tải lên của trình duyệt

2) Nhận dấu thời gian hiện tại

3) Thời gian tải lên trình duyệt + 10 giây

4) Nếu thời gian tải lên của Trình duyệt lớn hơn 10 giây so với dấu thời gian hiện tại thì trang có thể được làm mới qua "reloadPage ();"

Nhưng nếu nó không lớn hơn 10 giây có nghĩa là trang chỉ được tải lại do đó nó sẽ không được tải lại nhiều lần.

5) Do đó nếu bạn gọi "reloadPage ();" chức năng ở đâu đó trong trang tệp js của bạn sẽ chỉ được tải lại một lần.

Hy vọng điều đó sẽ giúp ai đó

// Reload Page Function //
                function reloadPage() {
                    var currentDocumentTimestamp = new Date(performance.timing.domLoading).getTime();
                    // Current Time //
                    var now = Date.now();
                    // Total Process Lenght as Minutes //
                    var tenSec = 10 * 1000;
                    // End Time of Process //
                    var plusTenSec = currentDocumentTimestamp + tenSec;
                    if (now > plusTenSec) {
                        location.reload();
                    }
                }


                // You can call it in somewhere //
                reloadPage();

3
<script>

function reloadIt() {
    if (window.location.href.substr(-2) !== "?r") {
        window.location = window.location.href + "?r";
    }
}

setTimeout('reloadIt()', 1000)();

</script>

cái này hoạt động hoàn hảo


Lưu ý: 1000 có nghĩa là 1 giây bạn có thể đặt nó thành bất kỳ khoảng thời gian nào bạn muốn.
Godwin Tommy

1

Sau </body>thẻ:

<script type="text/javascript">
if (location.href.indexOf('reload')==-1)
{
   location.href=location.href+'?reload';
}
</script>

0

Bạn cần sử dụng thông tin GET hoặc POST. GET sẽ là đơn giản nhất. JS của bạn sẽ kiểm tra URL, nếu không tìm thấy một thông số nào đó, nó sẽ không chỉ làm mới trang mà còn đưa người dùng đến một url "khác", sẽ là cùng một URL nhưng có tham số GET trong đó .

Ví dụ:
http://example.com -> sẽ làm mới
http://example.com?refresh=no -> sẽ không làm mới

Nếu bạn không muốn URL lộn xộn, thì tôi sẽ bao gồm một số PHP ngay ở phần đầu của phần nội dung lặp lại một giá trị ẩn nói về bản chất liệu tham số POST cần thiết để không làm mới trang có được đưa vào yêu cầu trang ban đầu hay không. Ngay sau đó, bạn sẽ bao gồm một số JS để kiểm tra giá trị đó và làm mới trang CÓ thông tin ĐĂNG đó nếu cần.



0

Vui lòng thử với mã bên dưới

var windowWidth = $(window).width();

$(window).resize(function() {
    if(windowWidth != $(window).width()){
    location.reload();

    return;
    }
});

0
        var foo = true;
        if (foo){
            window.location.reload(true);
            foo = false;

        }

0

dùng cái này

<body onload =  "if (location.search.length < 1){window.location.reload()}">

0

sử dụng window.localStorage ... như thế này

var refresh = $window.localStorage.getItem('refresh');
console.log(refresh);
if (refresh===null){
    window.location.reload();
    $window.localStorage.setItem('refresh', "1");
}

Nó làm việc cho tôi


0

Đây là một giải pháp khác với setTimeout, không hoàn hảo, nhưng nó hoạt động:

Nó yêu cầu một tham số trong url hiện tại, vì vậy chỉ cần hình ảnh url hiện tại trông giống như sau:

www.google.com?time=1

Đoạn mã sau giúp trang tải lại chỉ một lần:

 // Reload Page Function //
    // get the time parameter //
        let parameter = new URLSearchParams(window.location.search);
          let time = parameter.get("time");
          console.log(time)//1
          let timeId;
          if (time == 1) {
    // reload the page after 0 ms //
           timeId = setTimeout(() => {
            window.location.reload();//
           }, 0);
   // change the time parameter to 0 //
           let currentUrl = new URL(window.location.href);
           let param = new URLSearchParams(currentUrl.search);
           param.set("time", 0);
   // replace the time parameter in url to 0; now it is 0 not 1 //
           window.history.replaceState({}, "", `${currentUrl.pathname}?${param}`);
        // cancel the setTimeout function after 0 ms //
           let currentTime = Date.now();
           if (Date.now() - currentTime > 0) {
            clearTimeout(timeId);
           }
          }

Câu trả lời được chấp nhận sử dụng ít mã nhất và dễ hiểu. Tôi chỉ cung cấp một giải pháp khác cho vấn đề này.

Hy vọng điều này sẽ giúp những người khác.


-1

Sử dụng rel = "external" như bên dưới là ví dụ

<li><a href="index.html" rel="external" data-theme="c">Home</a></li>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.