2012-02-14 97 views
1

我想要一個JavaScript在加載頁面後運行,就像下面的例子延遲6秒。在頁面加載後,JS的其餘部分就會丟失(顯而易見)... 有沒有任何想法如何在頁面加載後更改內容而不點擊按鈕?如何在頁面加載後更改內容(JS)?

javascript:window.location = "http://example.com"; 
setTimeout(function() { 
    document.getElementById('lightbox').style.display = 'none'; 
}, 6000); 
+1

在谷歌上查找「dom操作」。 – 2012-02-14 16:51:29

+0

我失敗了。我有超過6個小時尋找解決方案,這是我最後的希望得到幫助。 – virusbogdan 2012-02-14 16:53:34

+0

你想添加腳本到加載了window.location的頁面嗎?我假設這個頁面不是你的? – Jivings 2012-02-14 16:56:13

回答

3

一旦你設置了window.location,原始頁面將在瀏覽器加載新頁面之前被卸載。這意味着您的腳本將在新頁面開始加載之前消失,因此無法再修改新的HTML。

此行爲是瀏覽器安全模型固有的。沒有它,你可以將任何JavaScript注入到你選擇的任何網站,這將是一個巨大的安全風險。您所要求的是所謂的XSS(用於跨站點腳本),瀏覽器應用所謂的SOP(用於同一原始策略)阻止了這種情況。

有一些常見的方法來解決此限制在一個安全的方式:

  1. 設置代理同時服務於你的JavaScript和原始站點。這樣,您的腳本和原始網站都來自同一個域,並且滿足瀏覽器的原始策略(SOP)。您可以在自定義腳本佔據頂層窗口的iframe中運行原始網站。或者,您可以將腳本注入HTML,因爲它通過代理進行檢索。

  2. 將您的腳本作爲瀏覽器加載項或用戶腳本運行。如果您選擇這樣做,用戶將不得不特別授予您的腳本使用提升的權限在本地運行的權限。幾年前,Greasemonkey爲Firefox推出了客戶端腳本,但最近他們似乎失去了動力。

  3. 要求網站所有者包含您的腳本。我懷疑這是你的情況的有效選擇。但如果它是一個有效的選擇,它絕對是最簡單的選擇。

  4. 要求用戶在網站加載後運行腳本。這一個可能對你也不合適,但如果有效的話,它將再次成爲一個非常簡單的解決方案。

0

我還沒有明白你在說什麼。 JS丟失了?請更清楚。
我想你所說的是在DOM準備就緒後運行的jquery ready函數。
或者在其他情況下,請嘗試使用window.onload()函數。

+0

對不起,我沒有讓自己乾淨(英語不是我的主要語言,我盡我所能) 代碼將運行到窗口加載,這就是它。其餘的將不會在新頁面上運行。 試試看吧 - javascript:window.location =「http://google.com」; setTimeout(function(){alert('Loaded complete');},0); – virusbogdan 2012-02-14 16:56:40

0

這應該做的工作:

$(window).bind('load', function() { 
// your code here 
}); 

然後只需用.delay("6000");

延遲添加到您添加的代碼插入的代碼時,你的網頁是完全加載纔會運行。

1

您的示例顯示您首先重定向,然後試圖隱藏#lightbox。此腳本不起作用,因爲您在#lightbox隱藏之前將瀏覽器重定向到其他網站。

總之,如果您將用戶重定向到另一個URL(甚至是相同的URL),則不能讓上一頁的Javascript操縱下一頁的DOM。只有'在當前打開的頁面'上的Javascript可以操作當前打開的頁面,而不是其他頁面。

+0

好的,這是問題所在。我試圖找到一個解決方案,但似乎不可能? – virusbogdan 2012-02-14 17:00:49

+0

是的,這是不可能的。如果您還可以訪問要重定向到的網站,那麼您可以在重定向時發送特定的GET變量或其他內容,然後在目標網站上使用JavaScript進行相應操作。但總結一下,是的,不可能控制另一個頁面的Javascript。 JavaScript包含在它已加載的頁面中。 – kingmaple 2012-02-15 07:20:28

相關問題