2012-01-18 32 views
2

在我的網站中,我在iframeB中使用了iframeA,當iframeA更改它的內容時,我必須設置src。我只能使用onload事件來設置它,但是在加載站點時會調用它。我正在尋找一些事件或觸發器,它可以幫助我在開始加載之前檢測位置/ src更改。我不想在src設置之前等待整個頁面加載。我不得不iframeA不能直接訪問(略低於腳本)如何在加載之前獲得Iframe事件?

一些代碼:

var myframe = document.getElementById('frameB').contentWindow.document.getElementById('frameA'); 
myframe.onload=function (funcname) {...}; 

回答

1

什麼會改變iframe的來源?如果您有權訪問該代碼,則可以執行onload函數中的任何操作。

如果鏈接有它的target屬性設置爲iframe和,即源是如何變化的,那麼你可以hi-jack位置的鏈接點擊:

$('a[target="frameB"]').bind('click', function() { 
    //run your onload code here, it will run as the iframe is downloading the new content 
}); 

而且,只是一個側面說明,你可以結合的事件處理程序jQuery中的load事件是這樣的:

$('#frameB').bind('load', function() { 
    //run onload code here 
}); 

UPDATE

SITE - > frameB - > frameA

$("#frameB").contents().find("#frameA").bind('load', function() { 
    //load code here 
}); 

這將選擇#frameB元件(即在當前的頂層DOM),得到它的內容,發現#frameA元件,然後結合爲load事件的事件處理程序。

請注意,此代碼必須在#frameB加載了已存在於其DOM中的#frameA元素後運行。像這樣的東西可能是一個好主意:

$('#frameB').bind('load', function() { 
    $(this).contents().find('#frameA').bind('load', function() { 
     //run load code here 
    }); 
}); 

UPDATE

要在#frameB元素hi-jack位置鏈接:

$('#frameB').contents().find('a[target="frameA"]').bind('click', function() { 
    /*run your code here*/ 
}); 

這會找到在具有#frameB元素的任何鏈接的target屬性設置爲frameA並添加一個click事件處理程序。

而且,只有當iframe元素已加載(或至少獲得document.ready事件)時才能使用,因此您可以選擇它的元素。

+0

JavaScript調用將更改iframeA src(從iframeA調用)。 我只能訪問頂級網站的源代碼。站點 - > IFRAME_B - > IFRAME_A。第二個片段只有在#frameB是首頁的孩子時纔有效,不是嗎?我不能hi.jack點擊,因爲改變呼叫來自js。 (ifamreA) – Pmillan

+0

只要它們在同一個域中(否則same-domain-policy不允許這樣做),您可以選擇'