当IFRAME完成加载时的Javascript回调?

2022-08-30 03:00:51

我需要在IFRAME完成加载后执行回调。我无法控制 IFRAME 中的内容,因此我无法从那里触发回调。

这个IFRAME是以编程方式创建的,我需要将其数据作为回调中的变量传递,以及销毁iframe。

有什么想法吗?

编辑:

以下是我现在拥有的:

function xssRequest(url, callback)
{
    var iFrameObj = document.createElement('IFRAME');
    iFrameObj.src = url;            
    document.body.appendChild(iFrameObj);   

    $(iFrameObj).load(function() 
    {
        document.body.removeChild(iFrameObj);
        callback(iFrameObj.innerHTML);
    });
}

此回调在 iFrame 加载之前,因此回调没有返回任何数据。


答案 1

首先,通过函数名称xssRequest,这听起来像是你正在尝试跨站点请求 - 如果这是正确的,你将无法读取iframe的内容。

另一方面,如果iframe的URL在您的域中,您可以访问正文,但我发现如果我使用超时来删除iframe,则回调工作正常:

// possibly excessive use of jQuery - but I've got a live working example in production
$('#myUniqueID').load(function () {
  if (typeof callback == 'function') {
    callback($('body', this.contentWindow.document).html());
  }
  setTimeout(function () {$('#frameId').remove();}, 50);
});

答案 2

我正在使用jQuery,令人惊讶的是,当我刚刚测试和加载一个沉重的页面时,这似乎加载了,直到我看到iframe加载,我才在几秒钟内没有收到警报:

$('#the_iframe').load(function(){
    alert('loaded!');
});

因此,如果您不想使用jQuery,请查看他们的源代码,看看此函数的行为是否与iframe DOM元素不同,我稍后会自己查看它,因为我感兴趣并在此处发布。另外,我只在最新的chrome中进行了测试。