Iframe 中的 Javascript 未执行

Posted

技术标签:

【中文标题】Iframe 中的 Javascript 未执行【英文标题】:Javascript in an Iframe not executing 【发布时间】:2013-01-30 10:20:34 【问题描述】:

我在 javascript 方面有点菜鸟,所以请帮帮我。我的身体标签底部有这个:

<iframe id="scriptFrame" name="scriptFrame"  >
<script type="text/javascript" language="javascript">
alert("Hello World");
parent.alert("Hello world");
function foo()

   alert("Hello World");

</script>
</iframe>

两个警报都不会弹出。我究竟做错了什么?我尝试添加 html 和 head 标签,但没有帮助。我也尝试过 document.getElementById('scriptFrame').contentWindow.foo() 和 frames['scriptFrame'].foo() 但都没有用

【问题讨论】:

【参考方案1】:

请注意,您不能将任何内容直接添加到 &lt;iframe&gt; 标记中。即使使用 JavaScript,您也只能在 iframe 中的页面与父页面来自同一个域时添加内容。 因此,您必须执行以下操作:

<html>
<body>
<script >
function foo()

   alert("Hello World");

</script>
<iframe id="scriptFrame" onload="foo()"name="scriptFrame"  > 
</iframe>
</body>
</html>

可以从 iframe 调用父 JS 函数,但只有当 iframe 中加载的父页面和页面都来自同一个域,即 abc.com,并且两者都使用相同的协议,即两者都在 http:// 或 https:// 上。

在以下提到的情况下调用将失败:

    父页面和 iframe 页面来自不同的域。

    他们使用不同的协议,一个在 http://,另一个在 https://。

任何解决此限制的方法都非常不安全。

例如,假设我注册了域 superwinningcontest.com 并发送了指向人们电子邮件的链接。当他们加载主页时,我可以在其中隐藏一些 iframe 并阅读他们的 Facebook 提要,检查最近的 Amazon 或 PayPal 交易,或者——如果他们使用的服务没有实现足够的安全性——将资金从他们的帐户。这就是 JavaScript 仅限于同域同协议的原因。

【讨论】:

【参考方案2】:

iframe 的内容永远不会呈现。在 iframe 内指定某些内容时,这是使用 src 属性加载的内容的后备(对于不支持 iframe 的浏览器)。

因此,要么对 iframe 使用 onload,要么将 iframe 的内容放在单独的页面中,并在 src-attribute 中指定。

【讨论】:

【参考方案3】:

您必须将 iframe 的 src 属性与 iframe 将加载其内容的 URI 一起使用。

要内联插入的信息由该元素的 src 属性指定。另一方面,IFRAME 元素的内容只能由不支持框架或配置为不显示框架的用户代理显示。

你在 iframe 标签中有脚本,所以它只会在不支持框架的浏览器上显示。

【讨论】:

【参考方案4】:

您必须在 iframe 中包含 &lt;html&gt;,并且 &lt;script&gt; 标记必须在 &lt;head&gt;&lt;body&gt; 中。

另外,请注意 &lt;script&gt;language 属性已弃用。

【讨论】:

看来我错过了什么,最后我看到iframe标签之间的内联代码,在IE5或其他东西中......???这里到底发生了什么? 此外,@Bhushan Firake 是对的。我忽略了您正在尝试将内容添加到 iframe 的事实。 iframe 必须具有 src 属性并拉入文档。【参考方案5】:

如果您在加载 iframe 时尝试运行 javascript,请尝试以下操作:

<html>
    <head>
        <script type="text/javascript">
            function someFunction()
                //some stuff here
            
        </script>
    </head>
    <body>
        <iframe id="scriptFrame" name="scriptFrame"   onload="someFunction();"></iframe>
     </body>
</html>

【讨论】:

以上是关于Iframe 中的 Javascript 未执行的主要内容,如果未能解决你的问题,请参考以下文章

谷歌浏览器在 JavaScript 动态更改后未更新 iframe 元素 innerHTML

使用 JavaScript 删除 iframe 中的 HTML 元素

在“src”上使用 javascript 变量时未加载 Google Maps iFrame

在 iframe 中使用 ajax 调用时未定义 xhttp

在 iFrame 中安全地执行 HTML5/Javascript

在移动 Safari 中按下后退按钮后,Javascript 停止在 iframe 中执行