需要实现的页面逻辑是:
1. 点击父窗体中按钮,显示侧边栏;
2. 点击页面其他区域(iframe)可以隐藏侧边栏
先构造页面文档结构:
<html>
<body>
<aside id="sidebar">
<%--这是需要隐藏的侧边栏--%>
</aside>
<button><%--点击按钮显示侧边栏--%></button>
<iframe id="my-iframe">
<%--获取此区域的点击事件--%>
</iframe>
</body>
</html>
因为相对于父窗体,iframe中加载的是一个相对独立的document文档,如果直接在父窗体中使用iframe.onlick监听该区域的点击事件,则不会返回任何结果。
首先我们需要获取iframe所属的document对象:
document.getElementById('my-iframe').contentDocument
随后对这个document对象注册事件处理程序,监听响应鼠标点击事件:
document.getElementById('my-iframe').contentDocument.onclick = function () {
var sidebar = document.getElementById('sidebar');
if (sidebar.style.display == 'block') sidebar.style.display = 'none';
};
但是这样做还不能满足要求,因为iframe中内容会单独加载,如果我们在它的DOM解析完成之前就去获取document对象并绑定事件监听程序,将不会有任何效果。
所以我们需要先监听iframe页面加载完成事件,在处理程序中获取文档对象:
var iframe = document.getElementById('my-iframe');
iframe.onload = function() {
iframe.contentDocument.onclick = function () {
var sidebar = document.getElementById('sidebar');
if (sidebar.style.display == 'block') sidebar.style.display = 'none';
};
}