這與Javascript callback when IFRAME is finished loading?類似,但區別在於我使用了一個基於Web的應用程序,並對其進行了一些監控,我已將它放入iframe中,以便我的JavaScript可以查看網頁內部。每當iframe重新加載時都需要回調
因此,當用戶使用該應用程序時,它將加載新頁面,但它們都在iframe中,並且不會被重新加載。
是否有某種方式的事件會通知我,只要在此iframe中加載頁面,或至少在頁面被替換時通知我?
這與Javascript callback when IFRAME is finished loading?類似,但區別在於我使用了一個基於Web的應用程序,並對其進行了一些監控,我已將它放入iframe中,以便我的JavaScript可以查看網頁內部。每當iframe重新加載時都需要回調
因此,當用戶使用該應用程序時,它將加載新頁面,但它們都在iframe中,並且不會被重新加載。
是否有某種方式的事件會通知我,只要在此iframe中加載頁面,或至少在頁面被替換時通知我?
有沒有這樣的事件。我想到的唯一想法是讓定時器運行(window.SetInterval()
),定期檢查iframe的位置(URL)是否與之前的檢查相比發生了變化。
只是另一個想法:是你控制下的iframe的內容還是你正在查看來自其他域的內容?如果是你的,那麼你當然可以將事件放在代碼中,比如「onbeforeunload
」,這會告訴你iframe是否被重定向。
+1 - 我害怕沒有事件發生,但我希望是錯的。但是,我喜歡你定期檢查的解決方案,因爲我沒有想過。 – 2012-02-20 19:25:19
是否有某些原因onReadyStateChange不起作用? – Dave 2012-02-20 19:46:23
@Dave - 如果iframe不是調用者,只是一個觀察者,iframe如何獲取此事件? – 2012-02-21 15:22:20
您是否可以控制那些在iframe中加載的頁面?如果是的話那麼你可以添加到所有他們的js文件,只有做到這一點:
parent.loaded(document.location.href);
然後在主要頁面,在這裏你的iframe有這樣的:
function loaded(url) {
alert('"' + url + '" was loaded');
}
對於這個你還需要在與主頁相同的域中提供iframe中的所有頁面。
由於您是透過同一個域中的一個主要的iframe頁面,你需要有一個正在服刑的網頁服務器的控制權,因此,即使你不能修改代碼,你可以在服務器返回內容時在「運行時」對其進行修改。例如,你可以返回一個總是加載類似parent.loaded(document.location.href)的js文件的修改版本;。
這似乎比使用setTimeout更復雜,但它是另一種解決方案。
你可以做的另一件事情,因爲你有權訪問dom,因此你可以註冊到onunload event,這樣你就可以在確定頁面即將被重新加載時使用setTimeout,這將防止繼續無停止計時器。
綜上所述,也許這不是實施此監控的最佳方式?也許你可以通過瀏覽器擴展實現這一點?那些有幸意識到所有文件位置的變化。
你可能想嘗試使用此onload event爲I幀
問題是這是我們購買的套餐。我無法對其進行任何更改,但我需要監視顯示給用戶的一些內容。所以,我能想出的唯一解決方案是讓一個iframe加載這個應用程序,因爲url是我能夠檢查dom的同一個域,但是當有人點擊一個標籤或鏈接並進入某個頁面時在應用程序中,我需要他們重新檢查數據以查看某些信息是否仍然正確。這是我卡住的地方。 – 2012-02-20 19:44:10
好的,現在我知道更多關於你的情況,我會編輯我原來的答案。 – 2012-02-20 19:50:37
如果你正在加載從您控制應用程序的網頁,你應該有一個明確的應用程序發送消息給父框架而不是嘗試監視iframe的就緒狀態。 – Dave 2012-02-20 19:28:11
這是一個第三方應用程序,我們需要監視一些發回的內容,以幫助識別問題。 – 2012-02-20 19:41:13