frameset 将截断键盘和鼠标事件的问题解决办法
2010-09-02 23:30
351 查看
最近发现一个网页程序的Bug, 我的 主页面引用了一个 IFrame, 而IFrame里面有 Frameset 的两个Frame. 主页面是有滚动条的, 但是在 FrameSet 的 frame获得焦点时, 无法将键盘(上,下键)或者鼠标中键消息传递给 主页面, 导致无法操作滚动条.
在网络上找了半天,都没有找到解决办法, 最后还是自已动手, 解决了这个问题.
处理方式是:
1: 针对frameset 中的每个frame注册键盘和鼠标中键的事件.
2: 在事件中, 强行对外层页面进行滚动操作.
相关代码是:
//注册滚动事件
function registerScroll() {
try {
//需要滚动的窗体,对于我的应用,固定为以下窗体
//如果针对其它门户,需要进行修改或改为参数传递
var scrollWindows = top.frames(0);
for(var i = 0; i < frames.length; i++) {
var h = new ScrollHandle(i,scrollWindows);
frames[i].document.attachEvent("onkeydown",h.keyDownhandle);
frames[i].document.attachEvent("onmousewheel",h.wheelHandle);
}
}catch(err){}
}
/**
* 强制滚动指定的窗体
*/
function ScrollHandle(index,scrollWindows) {
this.keyDownhandle = function()
{
try {
var keyCode = frames[index].event.keyCode;
if (keyCode == 40) //下键
scrollWindows.document.body.doScroll("scrollbarDown");
else if(keyCode == 38) //上键
scrollWindows.document.body.doScroll("scrollbarUp");
else if(keyCode == 37) //左键
scrollWindows.document.body.doScroll("scrollbarLeft");
else if(keyCode == 39) //右键
scrollWindows.document.body.doScroll("scrollbarRight");
//else 其它键暂时不做处理
} catch (err){}
}
this.wheelHandle = function()
{
try {
var wheelDelta = frames[index].event.wheelDelta;
if (wheelDelta >= 120) //上滚
scrollWindows.document.body.doScroll("scrollbarUp");
else if (wheelDelta <= -120) //下滚
scrollWindows.document.body.doScroll("scrollbarDown");
} catch (err) {}
}
}
在网络上找了半天,都没有找到解决办法, 最后还是自已动手, 解决了这个问题.
处理方式是:
1: 针对frameset 中的每个frame注册键盘和鼠标中键的事件.
2: 在事件中, 强行对外层页面进行滚动操作.
相关代码是:
//注册滚动事件
function registerScroll() {
try {
//需要滚动的窗体,对于我的应用,固定为以下窗体
//如果针对其它门户,需要进行修改或改为参数传递
var scrollWindows = top.frames(0);
for(var i = 0; i < frames.length; i++) {
var h = new ScrollHandle(i,scrollWindows);
frames[i].document.attachEvent("onkeydown",h.keyDownhandle);
frames[i].document.attachEvent("onmousewheel",h.wheelHandle);
}
}catch(err){}
}
/**
* 强制滚动指定的窗体
*/
function ScrollHandle(index,scrollWindows) {
this.keyDownhandle = function()
{
try {
var keyCode = frames[index].event.keyCode;
if (keyCode == 40) //下键
scrollWindows.document.body.doScroll("scrollbarDown");
else if(keyCode == 38) //上键
scrollWindows.document.body.doScroll("scrollbarUp");
else if(keyCode == 37) //左键
scrollWindows.document.body.doScroll("scrollbarLeft");
else if(keyCode == 39) //右键
scrollWindows.document.body.doScroll("scrollbarRight");
//else 其它键暂时不做处理
} catch (err){}
}
this.wheelHandle = function()
{
try {
var wheelDelta = frames[index].event.wheelDelta;
if (wheelDelta >= 120) //上滚
scrollWindows.document.body.doScroll("scrollbarUp");
else if (wheelDelta <= -120) //下滚
scrollWindows.document.body.doScroll("scrollbarDown");
} catch (err) {}
}
}
相关文章推荐
- 台式机鼠标键盘失灵问题解决办法
- Node监听鼠标键盘事件,定时发消息小程序,解决robotjs不支持输入汉字问题!
- win7系统电脑有鼠标无键盘问题的解决办法
- “问题事件名称:BEX 故障模块名称:StackHash_9fba”的解决办法
- android 虚拟机键盘无法使用问题解决办法
- IOS 键盘挡住输入框的问题解决办法
- ListView+EditText失去焦点和软键盘问题解决办法
- 鼠标右击没有新建文本问题解决办法
- 解决回收键盘与cell点击事件冲突问题(思路添加手势代理)
- javascript事件, 解决mousedown和click冲突事件, 鼠标事件, 键盘事件, 文本事件用法简介
- ThinkPad蓝牙鼠标出现延迟、断开连接等问题的解决办法
- 重装系统时,USB接口鼠标和键盘不能使用的解决办法
- core文件被截断问题的解决办法
- QT5.5.1 嵌入式平台 鼠标键盘不能热插拔问题解决(一)
- Windows运行程序错误问题事件名称: InPageError 错误状态码: c000009c解决办法
- EditText焦点问题 Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法
- dialog dismiss时键盘不消失的问题浅析及解决办法
- IOS中input键盘事件keyup 的兼容解决办法
- Servlet实现下载 firefox下文件名有空格时,文件名会被截断 问题解决办法
- 解决swt桥连awt后鼠标滚轮事件(MouseEvent)无法接收的问题。