【问题标题】:Apply "onclick" to all elements in an iFrame将“onclick”应用于 iFrame 中的所有元素
【发布时间】:2009-04-25 01:32:48
【问题描述】:

如何使用 JavaScript DOM 将 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);

【问题讨论】:

  • 可以修改iframe的页面内容吗?
  • 能否提供更多代码,以便我们查找错误?我想查看触发此代码的上下文。检查此代码是否在框架内容加载后运行,而不是更早。

标签: iframe onclick


【解决方案1】:

iFrame 可以从不同域的另一个网站获取内容。

能够访问其他域上的内容将对用户构成安全漏洞,因此无法通过 Javascript 进行此操作。

因此,您不能将页面中的事件附加到 iFrame 中的内容。

【讨论】:

【解决方案2】:

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
}

【讨论】:

  • 正如 Jon 已经回答的那样,JavaScript 安全策略不允许浏览器访问或修改来自其他域的页面内容。
猜你喜欢
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 2019-12-12
  • 2017-11-06
  • 2018-05-19
相关资源
最近更新 更多