我遇到了同样的问题并添加到此,我需要检查 iframe 是否已加载,而不管跨域策略如何。我正在开发一个 chrome 扩展,它在网页上注入某些脚本并在 iframe 中显示来自父页面的一些内容。我尝试了以下方法,这对我来说很完美。
PS:就我而言,我确实可以控制 iframe 中的内容,但不能控制父站点上的内容。(iframe 托管在我自己的服务器上)
首先:
创建一个带有data-
属性的 iframe,例如(在我的情况下,这部分在注入脚本中)
<iframe id="myiframe" src="http://anyurl.com" data-isloaded="0"></iframe>
现在在 iframe 代码中,使用:
var sourceURL = document.referrer;
window.parent.postMessage('1',sourceURL);
现在回到根据我的情况注入的脚本:
setTimeout(function(){
var myIframe = document.getElementById('myiframe');
var isLoaded = myIframe.prop('data-isloaded');
if(isLoaded != '1')
{
console.log('iframe failed to load');
} else {
console.log('iframe loaded');
}
},3000);
和,
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event)
{
if(event.origin !== 'https://someWebsite.com') //check origin of message for security reasons
{
console.log('URL issues');
return;
}
else {
var myMsg = event.data;
if(myMsg == '1'){
//8-12-18 changed from 'data-isload' to 'data-isloaded
$("#myiframe").prop('data-isloaded', '1');
}
}
}
它可能不能完全回答这个问题,但它确实是我通过这种方法解决的这个问题的一个可能情况。