【问题标题】:Javascript, accessing nested frames in framesets from a iFrameJavascript,从 iFrame 访问框架集中的嵌套框架
【发布时间】:2013-07-10 22:18:45
【问题描述】:

我在访问作为加载到 iframe 中的页面的一部分的框架时遇到问题。框架嵌套在多个框架集中。

我的 html 看起来像这样:

<iframe name="sourceframe" src="siteindex.html">
    #document <-- this appears in the dom tree. Not sure if it's relevant.
        <html>
            <head></head>
            <frameset>
                ...other frames
                <frameset>
                    <frame name="targetframe" src="sitesubpage.html">
                        ...I want to access this frame and replace the contents with a different html page...
                    </frame>
                </frameset>
            </frameset>
        </html>
</iframe>

我已经阅读了类似的问题,但没有一个可以解决。

任何建议将不胜感激。

【问题讨论】:

  • stackoverflow.com/questions/1644676/… 在导航框架集时,我无法让此答案中使用的方法起作用。
  • document.frames['sourceframe'].document.frames['targetframe'] 应该包含对#targetframewindow 的引用,来自放置#sourceframe 的页面。如果这不是您需要的,请详细说明您的问题,从哪里到哪个元素/对象您需要参考。
  • @Teemu 这就是我所需要的。我似乎有什么设置错误。从我的源 iframe 所在的页面检查 document.frames.length 会给出“无法读取未定义的属性“长度””它不应该是 1 吗?
  • 奇数...尝试window 而不是document。您使用的是哪个浏览器?您还确定在您阅读frames 的长度时存在iframe 吗?最好在 window.onload 处理函数中执行此操作。
  • @Teemu iframe 被创建为 window.onload (在头部)。使用 chrome 版本 27.0.1453.116。 window.frames['sourceFrame'].frames.length 给出的长度为 0。

标签: javascript html iframe frame


【解决方案1】:
window.frames['sourceframe'].frames['targetframe'].location.href = 'new_html_page';

FF 和 Chrome 仅在 window 中有 frames 集合,IE 和 Opera 在 document 中也有它。上面的代码工作(测试),当你得到你的时间更正。

尝试在更改href 之前使用一些超时,或从#targetframe 触发更改。您还可以将onload 事件侦听器附加到iframe,并触发其中的更改。还有一个,你可以在关闭body标签之前放置创建iframe的脚本,然后你可以使用window.onload来改变页面的深度...

【讨论】:

【解决方案2】:

你可以给你的frame 元素加上name='targetframe' 一个id='targetframe' 并执行以下操作:

function E(e){
  return document.getElementById(e);
}
function getChildFrame(id){
  var t = E(id);
  var f = t.contentWindow || t.contentDocument;
  if(f.document)f = f.document;
  return f;
}
var tf = getChildFrame('targetframe');
tf.style.backgroundColor = '#007';

http://www.w3schools.com/jsref/prop_frame_contentwindow.asp

http://www.w3schools.com/jsref/prop_win_frames.asp

了解更多详情。当然,同源政策适用。也就是说,未经许可,您无法访问他人的frame

顺便说一句,您也可以使用数字访问frames 数组。

【讨论】:

  • 这个问题是框架有名称属性而不是 ID。所以我觉得嵌套元素还是需要遍历的?
  • @PHPglue 只有window 对象可以有parent 属性。
  • 糟糕,我看到并纠正了我的错误。如果你想要父窗口使用window.parent
猜你喜欢
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多