不知道這是否是你後之類的事情 - 但它可以幫助
注:我不一般都喜歡這種類型的代碼,我本來以爲我會用MutationObserver - 但是,我發現我必須做類似上面的事情,等待iframe的contentDocument,以表明內容已經開始加載,然後我可以附加突變觀察者 - 然後我會錯過head
元素被一半的時間附加!
火狐對iFrame的mozbrowserloadstart事件 - 不過這只是Firefox的,所以不是所有有用的其他
function limitedRetryWithDelay(count, delay, tester, cb) {
var res = tester();
if(res) {
cb(res);
} else {
if (count > 0) {
setTimeout(function() {
limitedRetryWithDelay(count - 1, delay, tester, cb);
}, delay);
}
}
}
// next 3 lines is just how I tested it - you'll need a reference to the iframe node instead for "tgt"
var tgt = document.createElement('iframe');
document.body.appendChild(tgt);
tgt.src = '/index.html?_=' + Math.random() + '_' + Math.random();
// end testing code
// try every 10ms for 5 seconds because (500 * 10 = 5000ms)
limitedRetryWithDelay(500, 10, function (e) {
return tgt.contentDocument && tgt.contentDocument.location != 'about:blank' && tgt.contentDocument.head;
}, function(head) {
console.log('head is', head);
});
隨時隨地順便說一句,你可能不需要等待head
做一些與之前存在文檔,您可能能夠只是等待contentDocument
limitedRetryWithDelay(500, 10, function (e) {
return tgt.contentDocument && tgt.contentDocument.location != 'about:blank' && tgt.contentDocument;
}, function(doc) {
console.log('document is', doc);
});
真的,beforeunload是無關緊要因爲這是沒有什麼用的「當前頁」 –
做不知道是否有可能上添加一個'MutationObserver' '如果rame.contentDocument'但這可能是一些可以幫助(等待'head'被添加到DOM,然後做你的事情) –
我知道我剛剛嘗試了每個Iframe相關的事件,我可以找到和onbeforeload,並onload是我見過的工作中唯一的兩個。我懷疑它不可能,但是在我放棄努力之前想確定它。 – Cggart