【问题标题】:jQuery - script tag inside an iframe fails to update the iframe's contentjQuery - iframe 内的脚本标签无法更新 iframe 的内容
【发布时间】:2009-08-19 15:39:22
【问题描述】:

我有以下html:

<html>
    <head></head>
    <body>
        <form>
            <input id="msg" type="text" value="oldValue" />
        </form>
        <script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
        <script>
            $().ready(function() {
                var m = $("#msg");
                alert(m.val()); // returns oldValue
                m.val("newValue"); // this doesn't make the browser show newValue instead of oldValue
                alert(m.val()); // returns newValue
                // and in the end, the browser still shows oldValue for the input
            });
        </script>
    </body>
</html>

这段代码运行完美,但是当放置在一个 facebox(它只是创建一个 iframe 并将其显示为一个浮动窗口)时,代码无法更新输入的内容。

父级也有 jQuery,但这不会影响我的猜测。

任何想法为什么它失败了?

【问题讨论】:

  • 您是否尝试过获取实际的 DOMElement 而不是使用 jQuery 的方法来做到这一点?

标签: jquery iframe


【解决方案1】:

无法在 Firefox 3、IE 7 或 Chrome 2 上复制。无论是否在 iframe 中,代码都可以正常工作(在适当的地方使用 newValue)。

您是否测试过您的简化示例实现,而不是您的原始实现?因为我怀疑我们有一个问题,你认为它们是等价的,而实际上它们不是。

当然,好消息是,如果您发布的示例实现有效,那么您所要做的就是添加实际实现中的元素,直到出现问题。

【讨论】:

  • 实际上,在我的实现中它是从同一个域加载的,粘贴的版本只是为了能够共享它,因为我的实现要大得多:)
【解决方案2】:
doc = xframe.contentWindow.document || xframe.document || xframe.contentDocument || xframe.contentWindow && xframe.contentWindow.document || null;

if(!doc)
{
  alert("Error");
  return false;
}

var m = $(doc).find("#msg");

【讨论】:

  • 如果您仔细阅读我的描述,您会发现我的脚本成功找到了#msg 元素,可以读取它的值,但不能设置它。
  • 好的,我正在做的是访问数据的替代方法。那么这在你的能力范围内适应。一件事是没用,另一件事是错误。
  • 如果项目在 iframe 中,则只能使用 iframe 对象访问。我们必须看看你在当前文档的 iframe 中是否有相同的 id,¿ok?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 2012-03-11
相关资源
最近更新 更多