【问题标题】:Getting contents of dynamic Iframe获取动态 iframe 的内容
【发布时间】:2013-05-22 17:53:42
【问题描述】:

我正在尝试获取动态生成的 iframe(同域)的内容。到目前为止我有这个。

 var frame = $('#avacweb_chat iframe');
 var time = $('.date-and-time' , frame.contents()).last().attr('title');
 var getTime = setInterval(function() {
    var newTime = $('.date-and-time , frame.contents()').last().attr('title');
 },500);

我尝试了第 1 行和第 2 行以及time 的警报,看看我是否真的在抓取数据。虽然我不是。基本上我想要做的是得到最后一条消息.data-and-time 并使用 setInterval 得到同样的东西。

如果他们不同,就做点什么。

这就是我相信一旦我获得数据就会设置我的代码的方式

 var frame = $('#avacweb_chat iframe');
 var time = $('.date-and-time' , frame.contents()).last().attr('title');
 var getTime = setInterval(function() {
    var newTime = $('.date-and-time , frame.contents()').last().attr('title');
 },500);
   if(time === newTime) {
       alert();
     } 

关于从 iframe 抓取数据有什么建议吗?

也试过=

var frame = $('#avacweb_chat iframe');
var time = $(frame).contents($('.date-and-time'));
alert(time.length);

我得到的 1 是正确的

然后我尝试了

var frame = $('#avacweb_chat iframe');
var time = $(frame).contents($('.date-and-time').attr('title'));
alert(time);

变成[object Object]

工作代码=

   var frame = $('#avacweb_chat iframe');
   var time = $('.date-and-time' , frame.contents()).last().attr('title');
   var newTime = setInterval(function() {
   var newT = $('.date-and-time' , frame.contents()).last().attr('title');
   },500);
    if(time !== newT) {
      alert('New Message');
    } 

现在我的问题是如何获取 newTime 存储它然后比较它们?

【问题讨论】:

  • 这是什么, frame.contents()') .. 看起来它不是一个有效的选择器!!
  • iframe src 在您的域中吗?因为如果没有,同源政策将毁掉你的一天。编辑:刚刚看到您在顶部说相同的域。
  • Same Origin yes ;) 和 Sushanth 我正在阅读有关如何从 iframe 获取数据的其他问题,他们说要这样做,这就是我这样做的原因......这是错的吗?
  • var newTime = $('.data-and-time' , frame.contents()).last().attr('title'); 应该至少部分修复它。 frame.contents() 不应该在字符串中。这是第二个论点。
  • 'frame.contents()' 是一个字符串,它不获取框架的内容。

标签: javascript jquery iframe setinterval


【解决方案1】:

也许这是一个竞争条件。在您尝试遍历 DOM 时,您的 iFrame 是否可能尚未完全加载?试一试:

var frame = $('#avacweb_chat iframe'),
    newTime;
frame.on('load', function(){
    newTime = frame.contents().find('.date-and-time').attr('title');
});
alert(newTime);

【讨论】:

  • 这是一个正确的ajax请求吗?我们不应该需要的。该页面是在我在控制台中调试时加载的,我还没有将代码放入硬中,只是控制台测试。所以这不是问题。
  • 请查看更新的代码,因为我现在解决了这个问题,我只需要比较
  • 是的,你是对的。 .load() 方法的新实现用于从服务器检索数据。我没有意识到它从 jQuery 1.8 开始就被贬低了。我的意思是,您可能应该等待 iFrame 通过将“加载”事件绑定到它来加载,然后再尝试从中获取任何内容。我收集到您正在使用 setInterval 作为一种方式来做到这一点。再看看我之前的回答。我已经用我的更正更新了它。
  • 是的,当他们把东西拿出来时很糟糕,这就是我们应该始终跟上文档的原因之一。谢谢你的更新。
猜你喜欢
  • 2018-10-30
  • 1970-01-01
  • 2017-03-02
  • 2015-09-03
  • 2013-08-02
  • 2013-05-02
  • 1970-01-01
  • 2021-01-16
相关资源
最近更新 更多