Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript iframe内带有脚本标记的无限加载_Javascript_Iframe - Fatal编程技术网

Javascript iframe内带有脚本标记的无限加载

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

下面是代码,我在过去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>');
    </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插入的代码是否包含
文档。写
。但我明白了一点-如果没有打开
文档的流。写
你不需要用
文档关闭它。关闭
。虽然我认为这是更好的方法,我添加了另一个答案,对你的情况应该有帮助。为我节省了无数的时间