【问题标题】:IE8 Dot versus Bracket NotationIE8 点与括号表示法
【发布时间】:2012-11-01 14:02:16
【问题描述】:

我在 IE8 中遇到了一个奇怪的问题,我试图通过简单的操作来获取一些东西:

window.frames.frames[0].name; // get the name of the inner iFrame object

没什么特别的,但是当脚本运行时,IE7-8 会这样解释它:

window.frames.frames.0.name;

// which in-turn gives the error
// 'window.frames.frames.0.name' is null or not an object (which is not true)

为什么以及如何转换它,为什么它甚至不再工作了?

如果我在 IE8 的控制台中键入第一个 window.frames.frames[0].name;,它会抓取正确的 iFrame。但是输入 IE8 解释的内容 (window.frames.frames.0.name;),根本不起作用……(奇怪的是,“预期的 ';'”,这是零意义哈哈。

有人遇到过这样的问题吗?

【问题讨论】:

  • 记录window.frames.frames的长度,找到你的节点了吗?
  • 为什么是windows.frames.frames 而不是window.frames
  • 原来的 window.frames 将是父窗口本身(很奇怪)而@KevinB,它会以 0 的形式返回...哇,这让我发疯了!
  • 嗯...所以它的长度为 0。我猜这并不意味着它是未定义的,如果它是一个对象,它就没有长度。它是否具有您期望的 id 或名称?基本上,找出它在该链中的确切位置发生故障。

标签: javascript jquery internet-explorer iframe internet-explorer-8


【解决方案1】:

错误消息中的点符号只是浏览器使用的字符串,浏览器开发人员的选择很糟糕。

The line `window.frames.frames[0].name` does not make sense.

我期待

window.frames[0].name 

或者如果它是一个框架中的嵌套框架

window.frames[0].frames[0].name 

【讨论】:

  • 感谢 epas,我知道这完全没有意义,frames[0].frames[0] 也无法抓取它... IE8 和 iFrames 本身就有问题,似乎每个人都有他们有很大的问题。
  • 在加载之前引用它?如今,大多数人都避免使用框架/弹出窗口。 :)
【解决方案2】:

window.frames 是一个数组,不是吗?你不应该索引第一帧吗?

window.frames[0].frames[0].name;

【讨论】:

  • Window.frames 只是一个数组,如果有多个帧。在单帧页面中,Window.frames 返回一个有效对象。事实上,Window.frames[0] 失败了。
  • 好吧,这取决于它应该按 ID(在 IE 中)和按名称(在其他浏览器中)搜索,但不知何故数组索引正在工作......这也给出了几乎相同的结果: /
【解决方案3】:

如果您在调用周围加上括号,它会起作用吗?像这样:

(window.frames.frames[0]).name; // get the name of the inner iFrame object

你真的是指参考window.frames.frames[0] 而不仅仅是window.frames[0]

或者你的意思是:

window.frames[0].frames[0].name; // get the name of the inner iFrame object

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多