我试图通过将网页的HTML加载到iframe中来解析网页的HTML,然后在DOM上进行一些搜索。这是代码
function f(callback) {
var tmp = document.createElement('iframe');
$(tmp).hide();
$(tmp).insertAfter($('foo'));
$(tmp).attr('src', url);
$(tmp).load(function() {
var bdy = tmp.contentDocument.body;
callback(bdy);
$(tmp).remove();
});
}
在回调函数中,如果我执行类似以下的操作
function callback(bdy) {
alert($(bdy).find('bar').length);
}
有时它会给我正确的价值,但有时它会给我0。但是,如果我执行以下操作,则可以使用
var tmp = document.createElement('iframe');
$(tmp).hide();
$(tmp).insertAfter($('foo'));
$(tmp).attr('src', url);
$(tmp).load(function(tmp) {
setTimeout(function() {
var bdy = tmp.contentDocument.body;
callback(bdy);
$(tmp).remove();
}, '100');
});
由于setTimeout()取决于客户端,我想知道是否有更好的方法来实现相同的目标。感谢。
答案 0 :(得分:0)
检查this问题以及许多答案和相关问题。
<强>更新强>;这里有一些等待#bar
加载的代码:
function f(callback) {
var tmp = document.createElement('iframe'),
$tmp = $(tmp);
$tmp.hide()
.insertAfter($('foo'))
.attr('src', url);
$tmp.load(function() {
var bdy = tmp.contentDocument.body,
$bdy = $(bdy); // small optimization
var waitForBar = function() {
if($bdy.find('#bar').length > 0) {
callback(bdy);
$tmp.remove();
} else
setTimeout(waitForBar, 50);
};
waitForBar();
});
}