Javascript iframe内带有脚本标记的无限加载
下面是代码,我在过去7年中从未遇到过这个简单的问题:Javascript iframe内带有脚本标记的无限加载,javascript,iframe,Javascript,Iframe,下面是代码,我在过去7年中从未遇到过这个简单的问题: <html> <body> <iframe></iframe> <script> window.frames[0].document.write('<scr' + 'ipt type="text/javascript" src="//code.jquery.com/jquery-3.0.0.min.js"><\/scr' + 'ipt
<html>
<body>
<iframe></iframe>
<script>
window.frames[0].document.write('<scr' + 'ipt type="text/javascript" src="//code.jquery.com/jquery-3.0.0.min.js"><\/scr' + 'ipt>');
</script>
</body>
</html>
window.frames[0]。document.write(“”);
问题是浏览器的旋转轮继续旋转
网络控制台显示所有已加载的
如果我从DOM中删除iframe,或者添加/change@src属性,加载将停止。请尝试:
window.frames[0].document.write('<script type="text/javascript" src="//code.jquery.com/jquery-3.0.0.min.js"><\/script>');
window.frames[0]。document.write(“”);
我检查了JSbin,它工作正常。
更新: 我认为它无法工作,因为
iframe
中甚至没有任何文档。它只是一个空标记,直到它有一个工作的src
并被填充。
看
无论如何,这只能在iframe的内容位于同一个域(google的“跨源iframes”)时起作用。这里正在进行一场“竞赛”。您希望加载jQuery,以便正在加载的页面可以使用它,但在页面加载到iframe内部之前,您无法从iframe外部向内部加载任何脚本…看起来firefox在iframe周围可能有些奇怪
<html>
<body>
<iframe></iframe>
<script>setTimeout(function(){window.frames[0].document.write("hi");}, 5000);</script>
</body>
</html>
setTimeout(函数(){window.frames[0].document.write(“hi”);},5000);
这会导致页面加载后5秒启动微调器,并且不会消失(至少在我的电脑上是firefox 47.0)事实上,我刚刚找到了一个解决方案,如果您能够控制内部脚本,这个解决方案就可以工作了(虽然对加载像jQ这样的第三方没有帮助)
您应该使用
document.close()
关闭“当前流”。通过在Javascript中定义和附加元素,我能够插入脚本,而不会出现您描述的加载问题,而不会出现任何加载问题
<html>
<body>
<iframe id="myFrame"></iframe>
<script>
var jq = document.createElement('script')
jq.type = 'text/javascript'
jq.src = '//code.jquery.com/jquery-3.0.0.min.js'
document.getElementById('myFrame').contentDocument.getElementsByTagName('body')[0].appendChild(jq);
</script>
</body>
</html>
var jq=document.createElement('script')
jq.type='text/javascript'
jq.src='/code.jquery.com/jquery-3.0.0.min.js'
document.getElementById('myFrame').contentDocument.getElementsByTagName('body')[0].appendChild(jq);
当然,将
body
更改为head
将改变脚本在iFrame中的加载位置。我认为第一个答案是更好的方法,但我将提供第二个答案,该答案与您的代码几乎相同,但说明调用document.close()
也可以解决您的问题
问题是您已经开始在iFrame中写入文档的
元素,但尚未完成(这就是页面不断加载的原因)。调用document.close()
表示您已完成对文档的写入
<html>
<body>
<iframe></iframe>
<script>
var doc = window.frames[0].document
doc.write('<scr' + 'ipt type="text/javascript" src="//code.jquery.com/jquery-3.0.0.min.js"><\/scr' + 'ipt>');
doc.close();
</script>
</body>
</html>
var doc=window.frames[0]。文档
文件写入(“”);
doc.close();
是的,我知道,正如我在更新中所说的,在我目前的情况下,不应该(在加载之前)执行您尝试执行的操作,我无法控制iframe插入的代码是否包含文档。写。但我明白了一点-如果没有打开文档的流。写你不需要用文档关闭它。关闭。虽然我认为这是更好的方法,我添加了另一个答案,对你的情况应该有帮助。为我节省了无数的时间