Javascript/jQuery:在另一个框架中调用函数

chi*_*tom 3 javascript jquery frames

我是DOM和JavaScript的新手,在尝试从顶层框架或Firebug的上下文中调用框架中定义的函数时遇到了一些问题.

鉴于以下框架集:

<html>
    <body>
    <frameset cols="*" rows="81,*">
        <frame id="topFrame" tabindex="1" name="topFrame" noresize="noresize" scrolling="No" src="hometop.aspx"/> 
        <frameset border="0" cols="214,*" frameborder="no" framespacing="0">
            <frameset border="0" cols="*" frameborder="no" framespacing="0" rows="70,*">
                <frame tabindex="-1" id="chatFrame" name="chatFrame" scrolling="No" noresize="noresize" src=""/>
                <frame tabindex="-1" id="leftFrame" name="leftFrame" noresize="noresize" src="leftFrame.aspx"/>
            </frameset> 
            <frame tabindex="-1" id="mainFrame" name="mainFrame" src=""/>
        </frameset> 
        <noframes>Your browser does not support frameset.</noframes> 
    </frameset>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个javascript钩子,它将在首次打开上述文档时调用#leftFrame中定义的javascript函数.我在加载jQuery的Firebug会话中执行此操作.

jQuery("#leftFrame")返回一个框架DOM元素.现在我想在框架的上下文中执行我的函数(openLink,在leftFrame.aspx中的普通旧脚本标记中定义).我的理解是该函数将是leftFrame文档元素下的DOM节点.但是我无法掌握框架的文档.

我试过了:

 jQuery("#leftFrame").document
 jQuery("#leftFrame").contentDocument
 jQuery("#leftFrame").find("html")
Run Code Online (Sandbox Code Playgroud)

另外,在Firebug中检查DOM树时,我无法在任何DOM节点下看到openLink函数,正如我所期望的那样.

谁能帮我吗?

med*_*iev 7

$('#leftFrame')[0].contentWindow.document
$('#leftFrame')[0].contentWindow.functionName()
Run Code Online (Sandbox Code Playgroud)

以上应该有效.jQuery contents()只适用于iframe节点,所以你必须像这样引用它.

  • `contentWindow`是一个IE扩展,直到HTML5才标准化,并且在旧版本的其他浏览器中存在支持问题.通常,您应首先在长标准`contentDocument`属性的存在下分支代码(并在其上使用`defaultView`来获取关联的`window`),然后回退到IE6-7的`contentWindow`. (3认同)