javascript - 使用 addEventListener/attachEvent 注册框架的 onload 事件

标签 javascript frame onload addeventlistener frameset

我使用内联语法将事件添加到框架:

<FRAME SRC="s.htm" NAME="WINCONTENT" onload="alert( this )"> 

这有效(=每当加载新 URL 时都会触发该事件), 除了我更愿意使用注册事件 addEventListener/attachEvent

现在 - 在 onload="alert( this ) 示例中,this 设置为 HTMLFrameElement。 如何从 JavaScript 内部访问 HTMLFrameElement? (我需要将其指定为 addEventListener/attachEvent 的参数)

请注意,parent.WINCONTENT 等指向 Window 对象 而我需要的是 HTMLFrameElement。 我在谷歌上搜索了很多,但显然框架已经不流行有一段时间了。

完整列表如下:

index.htm

<HTML>
<HEAD>
<TITLE>WINMAIN</TITLE>
</HEAD>
<FRAMESET COLS=255,*>
<FRAME SRC="frm_navi.htm"  NAME="WINNAVI">
<FRAME SRC="s.htm" NAME="WINCONTENT" ID="WINCONTENT">
</FRAMESET>
</HTML>

frm_navi.htm

<HTML>
<HEAD>
<TITLE>Navigation Pane</TITLE>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript" SRC="dom.js"></SCRIPT>
</BODY>
</HTML>

s.htm

<HTML>
<HEAD>
<TITLE>CONTENTS</TITLE>
</HEAD>
<BODY>
    <P><A HREF="r.htm">r.htm</A></P>
    <P><DIV ID="test">Click me, the event handler was registered in JavaScript</DIV></P>
</BODY>
</HTML>

r.htm

<HTML>
<HEAD>
<TITLE>CONTENTS</TITLE>
</HEAD>
<BODY>
    <P>This file s.htm</P>
</BODY>
</HTML>

dom.js

function register_event ( _target, _ename, _func ) {
    if( ! _target ) {
        return false;
    }

    // Required for accessing <this> inside the event handling function.
    _target[_func] = _func;
    if ( _target.addEventListener ) {
        _target.addEventListener( 
            _ename, 
            function(e) { _target[_func](e);}, 
                false
            );
    }
    else if ( _target.attachEvent ) {
        _target.attachEvent( 
            "on" + _ename, 
            function(e) { _target[_func](e);}
        );
    }
    else {
        return false;
    }

    return true;
};

function handle_event ( ) {
    alert( "Event handler registered in JS." );
};

register_event( parent.WINCONTENT.document.getElementById( "test" ) , "click", handle_event );
register_event( "_what_do_i_enter_here_ ???", "load", handle_event );

最佳答案

您不能只为 frame 元素分配一个 ID 并使用 document.getElementsById (在父文档中)吗?

关于javascript - 使用 addEventListener/attachEvent 注册框架的 onload 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3521528/

相关文章:

javascript - 如何将空间视为角色

facebook - Facebook页面的最大iframe宽度是多少? (2011 年 7 月)

java - 在透明 JFrame 上添加图像

javascript - 强制内部 iframe 内容在页面加载时滚动到顶部

javascript - 无法更换括号

javascript - 模态弹出窗口在 jquery 中不起作用

javascript - 如何使用 Javascript 考虑多个搜索字段?

ios - 我的 UIButton 的位置在所有模拟器中都不同

Javascript - onload 事件

javascript - IFrame Loaded 事件中的所有内容