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】:请注意,您不能将任何内容直接添加到 <iframe>
标记中。即使使用 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 中包含 <html>
,并且 <script>
标记必须在 <head>
或 <body>
中。
另外,请注意 <script>
的 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