我有一个网页,其中包含指向另一个网站的<iframe>
。 我不希望这个<iframe>
阻止页面其余部分的加载。 有没有一种方法可以异步加载它?
我有一个网页,其中包含指向另一个网站的<iframe>
。 我不希望这个<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内容之前加载主页面的图片),那么你需要使用一些JavaScript代码来设置iframe的url,例如<body onload="javascript:...">
onload
事件才会触发。 - Mrchief我们遇到的一个问题是,尽管iframes已经异步加载,但主页面在iframe也完成加载之前不会触发OnLoad事件。
我们通过在主页面底部的脚本元素中调用所需方法来“模拟”OnLoad,即使在关闭body标签之外也可以实现:
</body>
<script type='text/jscript' language='javascript'>
BodyOnready();
</script>
我认为@Coxy是正确的,OnLoad不会触发。至少在运行一些网页性能测试时,它似乎正在等待iframe将页面视为完全加载。因此,我使用这个小的jQuery代码片段来加载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
方法将不执行任何操作。 - Valerio Bozzsrc
或者在加载后创建 iframe
的所有组合方式,但从 Chrome 加载动画中可以看出(就目前而言)它仍然在等待 iframe
被加载 :( 当然,如果我在控制台手动更新 iframe
的 src
,它就可以正常工作!我不知道该将更新函数绑定在哪里以避免长时间的加载状态。 - Cameron Hyde<body onload="loadFrame">
function loadFrame(){
var myFrame = document.getElementById('myFrame');
myFrame.src = "myURL";
};
iframes应该自动异步加载,而无需您付出任何努力。
<iframe id="YOURID" src="about:blank">Loading...</iframe>
JS:
window.onload = function(){
document.getElementById('YOURID').src = 'https://insertYourUrlHere.com'
};
text/jscript
的 MIME 类型,你为什么认为有呢?如果你认为有的话,那么请先搜索一下并确保它存在。 - Iharob Al Asimi虽然我同意这种情况不应该发生,但你可以等待你的网页完全加载后再加载iframe内容。使用jQuery,我认为你可以这样做:
<iframe name="theOtherPage"></iframe>
$(document).ready(function(){
(window.frames || document.frames)["theOtherPage"].window.location = "<a rel="nofollow noreferrer" href="http://theotherpage.com/">http://theotherpage.com/</a>";
});
$(document).ready
在DOMContentLoaded事件触发时运行,早于onload事件。在onload事件之前设置src仍然会阻塞onload事件。演示:https://codepen.io/mac9416/pen/qQLeyP - crenshaw-dev