2009-04-15 81 views
-1

如何使用JavaScript DOM將onclick事件應用於iframe以內的鏈接?將「onclick」應用於iFrame中的所有元素

這裏就是我試圖不工作:

document.getElementById('myIframe').contentDocument.getElementsByTagName('a').onclick = function(); 

沒有錯誤似乎被拋出,而我在iframe東西完全控制。

下面是一些代碼來測試,看看我是否至少可以算出iframe中有多少個div

// access body 
var docBody = document.getElementsByTagName("body")[0]; 

// create and load iframe element 
var embed_results = document.createElement('iframe'); 
embed_results.id = "myIframe"; 
embed_results.setAttribute("src", "http://www.mysite.com/syndication/php/embed.php"); 

// append to body 
docBody.appendChild(embed_results); 

// count the divs in iframe and alert 
alert(document.getElementById("myIframe").contentDocument.getElementsByTagName('div').length); 
+0

可以修改iframe的頁面內容? – 2009-04-15 21:49:32

+0

你能否提供一些更多的代碼,以便我們可以查找錯誤?我想看看這個代碼被激發的上下文。檢查框架內容加載後是否運行此代碼,而不是更早。 – Rafael 2009-04-15 22:01:56

回答

7

iFrame可以從另一個域上的其他網站獲取內容。

能夠訪問其他域上的內容會給用戶帶來安全隱患,因此無法通過Javascript來實現。

因此,您不能將頁面中的事件附加到iFrame中的內容。

+1

如果你在兩個域上控制iframe,這是可能的 - http://softwareas.com/cross-domain-communication-with-iframes – Tony 2010-03-24 04:38:53

3

getElementsByTagName返回一個NodeCollection,因此您必須遍歷此集合並將onclick處理程序添加到該集合中的每個節點。下面的代碼應該可以工作。

var links = document.getElementById('myIframe').contentDocument.getElementsByTagName('a'); 
for(var i=0;i<links.length;++i)links[i].onclick=function(){} 

也確保,運行框架的內容後,該代碼加載

embed_results.onload=function(){ 
    // your code 
} 
相關問題