2011-05-12 129 views
3

我有一個簡單的代碼:的iframe onload事件

<script> 
function change(){document.getElementById("browse").src = document.getElementById("addr").value;} 
function update(){document.getElementById("addr").value = document.getElementById("browse").src;} 
<script> 
<input type="text" id="addr"><input type="button" value="Go" onclick="change();"> 
<iframe id="browse" style="width:100%;height:100%" onload="update();"></iframe> 

更新();在例如沒有被調用時點擊了iframe中的鏈接並加載了新頁面。

有什麼問題?

+1

當你說update()沒有被調用,它是_actually_沒有被調用,或者你的腳本剛剛遇到錯誤並死亡? (您可以使用Chrome開發工具或Firebug進行檢查。) – lpd 2011-05-12 08:50:07

回答

6

您可以更改SRC後直接添加處理器讓它工作:

function change(){ 
    document.getElementById("browse").src = document.getElementById("addr").value; 
    document.getElementById("browse").onload = function (e){alert(e);} 
} 

看一看這個例子http://jsfiddle.net/xkBF3/

7

簡短的回答:你不能得到的網頁的URL除你以外的任何域名。你想要的網址可以與得到:

document.getElementById("browse").contentWindow.location.href; 

然而,在瀏覽您的由於在Same origin policy網站時,此網址可用。這將是未定義的,如果您嘗試在任何其他域上,您將收到安全錯誤。

所以,如果你想從其他域獲取頁面,並且你想用純javascript來做到這一點,那麼你不能。

長答案:您可能使用服務器端代理來加載iframe中請求的網址。喜歡的東西:

http://yourdomain.com/proxy.php?url=http://www.google.com/

然後當獲取URL獲得的URL參數,並提出,在「地址」輸入。

這種做法真的不值得去做;您將使用大量的帶寬,並且您將打開您的網站,讓希望通過防火牆進行代理並濫用代理服務以滿足其需求的用戶。