【发布时间】:2010-01-22 01:04:03
【问题描述】:
我有一个带有<iframe> 指向另一个网站的网页。我不希望这阻止页面其余部分的加载。有没有办法异步加载它?
【问题讨论】:
-
您要阻止哪个加载?异步是什么意思?
-
您是否遇到了页面加载被阻止的问题?
标签: iframe asynchronous
我有一个带有<iframe> 指向另一个网站的网页。我不希望这阻止页面其余部分的加载。有没有办法异步加载它?
【问题讨论】:
标签: iframe asynchronous
它不应该阻塞。如果您希望主页首先完全加载(例如,主页的图像在 iframe 内容之前),那么您必须使用一些 javascript 来设置 iframe 的 url,例如 <body onload="javascript:...">
【讨论】:
onload 在所有 iframe 加载完成之前不会触发。
使用 jQuery,这有效:
<script type="text/javascript">
$(window).load(function() {
var f = document.createElement('iframe');
f.src = url;
f.width = 1000;
f.height = 500;
$('body').append(f);
});
</script>
url 是某个 URL。
【讨论】:
我们遇到的一个问题是,虽然 iframe 已经异步加载,但在 iframe 也完成加载之前,主页不会触发 OnLoad。
我们通过在主页底部的脚本元素中调用我们想要的方法来“伪造”OnLoad 来解决这个问题,甚至在结束正文标记之外:
</body>
<script type='text/jscript' language='javascript'>
BodyOnready();
</script>
【讨论】:
我认为@Coxy 是正确的,OnLoad 不会触发。至少在运行一些网页性能测试时,在我看来它正在等待 iframe 考虑页面已完全加载。因此,我使用这个小的 jQuery sn-p 来加载 iframe:
HTML:
<iframe id="blabla"></iframe>
JS:
$(window).load(function() {
if ($('#blabla').length <= 0) { return; } // to avoid errors in case the element doesn't exist on the page / removed.
$('#blabla').attr('src','//example.com/page');
});
【讨论】:
$('#blabla').length。如果选择器为空,.attr 将执行任何操作。
您可以等到“onload”触发后设置 iframe 的 src:
<body onload="loadFrame">
然后是这样的:
function loadFrame(){
var myFrame = document.getElementById('myFrame');
myFrame.src = "myURL";
};
【讨论】:
iframe 应该异步加载,您无需付出任何努力。
【讨论】:
一些普通的 JS 替代品:
HTML:
<iframe id="YOURID" src="about:blank">Loading...</iframe>
JS:
window.onload = function(){
document.getElementById('YOURID').src = 'https://insertYourUrlHere.com'
};
【讨论】:
text/jscript mime 类型,为什么你认为有?如果你认为有,那么首先谷歌它并确定。
虽然我同意这不应该发生,但您可以等待网页完全加载,然后加载 iframe 内容。使用 jQuery,我认为您可以这样做:
<iframe name="theOtherPage"></iframe>
$(document).ready(function(){
(window.frames || document.frames)["theOtherPage"].window.location = "@987654321@";
});
【讨论】:
$(document).ready 在加载之前在 DOMContentLoaded 上运行。在 onload 之前设置 src 意味着它仍然会阻止 onload。演示:codepen.io/mac9416/pen/qQLeyP