javascript 我想做一个锁屏效果,但界面里有个iframe,如何在父页面监控该iframe是否有操作。

该iframe是主面板,用于展示各种功能界面,比较多,没可能每个子页面都去修改,让子页面调用父页面js函数,不现实。主页面主要是展示导航栏菜单。一开始直接给iframe加载onmousedown和onkeydown事件,可以用,但如果点下菜单,iframe里内容变更后,事件就无效了。
锁屏效果,已用的js框架实现,这个先不麻烦大家了。
最新回答
快乐若即若离

2024-07-09 02:56:17

你说的锁屏是指屏蔽掉用户的所有操作吧,在主页面创建一个绝对定位的div,盖住所有的元素,就能屏蔽掉鼠标事件了,再把焦点设置下,不要在某个输入框内,就不能输入了。
这样就不存在点击菜单的问题了

如果你只是想对iframe的子页面锁屏,那只用div盖住子页面的区域就行了。

不知道能不能解决你的问题。
追问
我问的是如何监控iframe里是否有操作,你可以再看看我想知道的是什么。至于锁屏效果,直接用现有的js框架实现了,就不麻烦你了。
追答
额,是我误会了,能不能详细说下监控子页面的操作是具体是指什么?举个例子。
追问
子页面有onmousedown或onkeydown事件,父页面就有相应的反应。不过不能修改现有的子页面,即不能让子页面来调父页面函数,给父页面传消息。
追答
你的意思是不是想要 子页面有鼠标事件或者键盘事件时,主页面也有响应。
看你说的情况,我想你需要在点击菜单,iframe内容变更时做相应处理,我有2个思路:

一:重新添加事件监听(不知道有没有用)

二:主页面创建一个script元素,内容为添加事件监听并回调主页面函数的脚本,每次点击菜单,子页面内容变了以后,把这个script元素插入到子页面内,这样不需要修改每个页面也可以回调主页面的函数。

我也要工作,没有时间去验证上面的方法是否可行,希望能帮到你~
冷魅

2024-07-09 10:35:58

换一个思路,可以这样,两种状态,一个是锁屏状态,一个是非锁屏状态,定义一个全局变量,根据不同的状态赋值,函数增加状态参数,通过判断锁屏状态参数赋予执行权限。
山木向海

2024-07-09 02:59:13

在主页面使用JS+setInterval+try来监视iframe的url变化(或是自己设定一个标志),通过带容错处理的方法给iframe的document对象绑定onmousedown和onkeydown事件就能实现了.
关键就在于定时扫描和容错处理.
追问
能否详细些?
追答
var ifrm=document.getElementById('iframeid');
function testfun(){
try{
var sdoc=ifrm.contentWindow.document;
}catch(e){
return;
}
if(sdoc.getAttribute('mystatus')!='ok'){
sdoc.attachEvent('onmousedown',mousedownfun);
sdoc.attachEvent('onkeydown',keydownfun);
sdoc.setAttribute('mystatus','ok');
}
}
window.setInterval(testfun,500);