检测动态加载的 iframe

Posted

技术标签:

【中文标题】检测动态加载的 iframe【英文标题】:detect a dynamically loaded iframe 【发布时间】:2013-09-28 04:11:47 【问题描述】:

我需要知道何时在页面上创建了特定的 iframe。 iframe是在用户按下按钮时用JS创建的,可以多次创建和销毁。

更新:创建 iframe 的 JS 是原始页面的一部分,因此我无法修改它或访问其变量或函数,chrome 扩展是沙盒。

我无法控制 iframe 的内容,也无法在其中注入任何 JS。 我只能在主页面中注入JS,否则没有其他控制。

(它用于 chrome 扩展,据我所知,它只能在主页或页面加载的 iframe 中注入 JS 代码,而不是在页面加载后动态创建的 iframe)

目前我这样做:

window.setInterval( function() 
  $("iframe").each(function()
    if ($(this).attr('id')) 
      if ($(this).attr('id') == "iframe_id") 
        //my code
      
    
  );
, 1000);

但由于性能问题,我真的很想避免使用 setInterval。 这有可能以某种方式实现吗?

【问题讨论】:

"iframe 是在用户按下按钮时用 JS 创建的" 所以你知道 iframe 是什么时候创建的。 【参考方案1】:

A. Wolff 可能已经回答了你的问题(“当用户按下按钮时,iframe 是用 JS 创建的”所以你知道 iframe 的创建时间”)。

如果你仍然不确定该怎么做……好吧:

间隔不是一个好主意 - 但你可能自己想通了。试试 on() 方法。这应该会有所帮助。

$( "iframe" ).on( "click", function() 
     alert( "This is my iframe!" );
);

如果您在选择 iframe 的内容时遇到问题,也许您应该尝试访问这样的元素:

$( "#iframe-id" ).contents().find( ".what-i-am-looking-for" ).hide();

如果您正在寻找 jQuery 文档,它将非常有帮助:

http://api.jquery.com/on/

http://api.jquery.com/contents/

干杯!

【讨论】:

我了解有关按钮按下的评论,问题是这是由不受我控制的 JS 创建的,当我在我只能访问的页面上注入带有 Chrome 扩展程序的 JS 代码时页面的 DOM 和我的 JS 代码,所以我无法访问页面本身加载的其他 JS 函数或事件。

以上是关于检测动态加载的 iframe的主要内容,如果未能解决你的问题,请参考以下文章

python爬取iframe动态加载的内容

动态设置 iframe 的 src 以延迟加载

点击时动态加载包含 iframe 的模式?

如何设置在加载所有动态添加的 iframe 时触发的 window.onload 事件?

JQuery 动态加载iframe.

将 CSS 动态加载到文档头部并在加载后等待