2009-04-15 43 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 
} 
相关问题