2012-03-20 63 views
0

我想將一個小的自動淡化javascript添加到已有jQuery的頁面。如何使用ajax自動刷新頁面(並阻止實際的瀏覽器刷新)?

我沒有對網站的控制權,所以我無法將簡單的腳本添加到每次刷新後都會顯示的HTML中。

我必須在控制檯中運行腳本,否則頁面將只刷新一次。

這裏就是我想:

var x = function(){ 
    // reload the page 
    jQuery('html').load(window.location.href); 

    // recurse every 5 seconds 
    setTimeout(x, 5000); 
}; 

// init 
x(); 

這是產生appendChild錯誤。我猜我只是想解決這個問題。

+0

您正在嘗試在HTML標記中注入一個頁面,就像附加子HTML一樣。而是使用'location.reload()',這會重新加載頁面一次,如果你想遞歸地嘗試簡單的JS,比如'window.setTimeout('location.reload()',3000);'。希望這可以幫助你...... – iDroid 2012-03-20 20:21:59

+0

也許我不明白,但在我看來,你需要一種叫做「注射」的東西。您可以使用[Greasemonkey](https://addons.mozilla.org/bg/firefox/addon/greasemonkey/)用於Mozilla FF或Chrome瀏覽器的等效項。 – Bakudan 2012-03-20 20:23:56

+0

不,這沒有幫助,因爲腳本必須通過控制檯運行。您的解決方案和其他人發佈的解決方案是使用'reload()',它清除了我在第一次刷新後通過控制檯追加的任何腳本:( – naomik 2012-03-20 20:24:09

回答

1

儘管缺乏信仰,這是可能的,這樣的解決方案,而不是完美的,肯定是合作得非常好

(function x(){ 
    jQuery('html').html('<iframe width="100%" height="' + $(window).height() + 'px" src="' + window.location.href + '"></iframe>'); 

    setTimeout(x, 5000); 
})(); 
+0

你試過我建議的嗎?看起來比創建iframe更簡單... – Castilho 2012-03-20 20:37:26

0

嘗試使用window.location.reload();像下面的自動刷新腳本,

<script> 
    setTimeout(function() { 
     window.location.reload(); 
    }, 5000); 
</script> 
+0

我最初認爲它可以工作,但這與手動刷新頁面相同。它只會用於第一次迭代。重新加載後,我通過控制檯發送的任何腳本都被清除了:( – naomik 2012-03-20 20:14:32

+0

這隻會刷新頁面一次,延遲時間爲5秒**注意**我不能把這個腳本放在HTML中,它必須請輸入javascript控制檯 – naomik 2012-03-20 20:19:20

+0

@naomik我不認爲這是可能的,控制檯中的腳本必須手動執行 – 2012-03-20 20:23:42

0

試試這個:

function x(){ 
    setTimeout(function(){ location.reload(); }, 5000); 
}(); 

編輯:你做了你的問題更加清楚一點。這應該是訣竅:

setInterval(function(){ location.reload(); }, 5000); 
+0

Elliot,這個失敗原因與SKS的答案一樣,請參閱我對他的回答的評論 – naomik 2012-03-20 20:16:16

+0

@naomik,編輯。哈,我的編輯和他的一樣。 – 2012-03-20 20:17:12

0

也許你想用頁面內容替換正文。它不會重新加載整個頁面,所以你的腳本將保持在那裏。但是,它可能與頁面上的現有腳本衝突。

如何做到這一點:

var x = function() { 
    $('body').load(window.location.pathname); 

    setTimeout(x,5000); 
} 
x(); 

jQuery Reference

編輯:

,現在更多的 'syntatically沒有那麼可怕' 的方法:重寫整個文件。

var x = function() { 
    $.get(window.location.pathname, function (data) { 
    document.open(); 
    document.write(data); 
    document.close(); } 
); 

    setTimeout(x,5000); 
} 
x(); 

這可以正常工作,不會重新加載正文標籤下的頁面。

但我認爲這是一個注射黑客太多打字和憂慮:P

+0

感謝你的建議,但是在一個HTML文檔中直接嵌入另一個HTML文檔的語法非常糟糕,腳本和CSS會在同一個「命名空間「。'