如果您的iframe來自不同的域,如在您的小提琴中,那麼您的JavaScript代碼根本無法訪問其內容,對不起!
作爲@Max poins出來,可以使用postMessage()
或網址片段劈在不同的域中使用的iframe進行通信,如果有在該iframe來處理從該側起的通信的代碼。
使用來自tumblr.com的iframe,您可以檢查他們的文檔以查看它是否討論瞭如何在iframe中使用此頁面並跨越域障礙與其通信。
現在,如果您將相同的域的iframe作爲您的頁面進行討論,那很簡單。給定名爲myframe
的變量中的iframe
元素,可以使用myframe.contentWindow
來獲取其window
對象和myframe.contentWindow.document
以獲取其document
對象。從那裏你可以做你需要的東西。例如:
var $myframe = $('#myframe'),
myframe = $myframe[0],
myframewin = myframe.contentWindow,
myframedoc = myframewin.document;
$(myframedoc).find('a').on('click', function() {
alert('Clicked!');
});
您仍然可以選擇使用主網頁的jQuery的副本訪問在iframe事情有些麻煩,但應該與最新版本更好的運氣。最糟糕的情況是,您可以使用本機DOM事件和方法,但jQuery在this updated fiddle中工作。
這個小提琴使用document.write將內容放在iframe中,但訪問該框架的jQuery代碼也是相同的。當然要注意的一件事是,當您嘗試訪問iframe時,iframe是否已完全加載。
我認爲你可以聆聽到包含頁的iframe
元素上load
事件,但最壞的情況下,你可以使用setTimeout()
或setInterval()
,等待你正在尋找變得可用的元素。
更新了我的答案... ...的jsfiddle可能無法正常工作,但它仍然是給我的麻煩與一個網站與iframe相同的域。此外,它應該仍然能夠在iframe本身被點擊時發出警報,對嗎?因爲這與iframe的內容無關! –
請不要使用Google作爲參考。指向一個特定的網站(維基百科應該沒問題) –
謝謝!希望這有效:) –