关于Javascript窗口获得和失去焦点的问题 30
window.onblur=function(e){e=e||window.event;if(window.ActiveXObject&&/MSIE/.test(navi...
window.onblur = function (e) {
e = e || window.event;
if (window.ActiveXObject && /MSIE/.test(navigator.userAgent)) { //IE
//如果 blur 事件是窗口内部的点击所产生,返回 false, 也就是说这是一个假的 blur
var x = e.clientX;
var y = e.clientY;
var w = document.body.clientWidth;
var h = document.body.clientHeight;
if (x >= 0 && x <= w && y >= 0 && y <= h) {
window.focus();
return false;
}
}
}
这个是不行的 在IE下 获得焦点会进入死循环
我想要的是类似Jframe那样的效果 下面是Jrame代码
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
import javax.swing.JFrame;
/**
* 捕获窗口焦点事件
*
* @author HAN
*
*/
public class WindowEvent_1 extends JFrame {
/**
*
*/
private static final long serialVersionUID = 6385933774053272194L;
public WindowEvent_1() {
// TODO Auto-generated constructor stub
addWindowFocusListener(new WindowFocusListener() {
public void windowGainedFocus(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("窗口获得了焦点!");
}
public void windowLostFocus(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("窗口失去了焦点!");
}
});
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
WindowEvent_1 frame = new WindowEvent_1();
frame.setTitle("捕获窗口焦点事件");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(0, 0, 300, 100);
}
}
这种效果是最好的 但是我的工程里面不能用这个 只能用javascript 轻高手帮帮忙吧 有木有好的办法 展开
e = e || window.event;
if (window.ActiveXObject && /MSIE/.test(navigator.userAgent)) { //IE
//如果 blur 事件是窗口内部的点击所产生,返回 false, 也就是说这是一个假的 blur
var x = e.clientX;
var y = e.clientY;
var w = document.body.clientWidth;
var h = document.body.clientHeight;
if (x >= 0 && x <= w && y >= 0 && y <= h) {
window.focus();
return false;
}
}
}
这个是不行的 在IE下 获得焦点会进入死循环
我想要的是类似Jframe那样的效果 下面是Jrame代码
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
import javax.swing.JFrame;
/**
* 捕获窗口焦点事件
*
* @author HAN
*
*/
public class WindowEvent_1 extends JFrame {
/**
*
*/
private static final long serialVersionUID = 6385933774053272194L;
public WindowEvent_1() {
// TODO Auto-generated constructor stub
addWindowFocusListener(new WindowFocusListener() {
public void windowGainedFocus(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("窗口获得了焦点!");
}
public void windowLostFocus(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("窗口失去了焦点!");
}
});
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
WindowEvent_1 frame = new WindowEvent_1();
frame.setTitle("捕获窗口焦点事件");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(0, 0, 300, 100);
}
}
这种效果是最好的 但是我的工程里面不能用这个 只能用javascript 轻高手帮帮忙吧 有木有好的办法 展开
2个回答
展开全部
window.onblur = function (e) {
e = e || window.event;
if (window.ActiveXObject && /MSIE/.test(navigator.userAgent)) { //IE
//如果 blur 事件是窗口内部的点击所产生,返回 false, 也就是说这是一个假的 blur
var x = e.clientX;
var y = e.clientY;
var w = document.body.clientWidth;
var h = document.body.clientHeight;
if (x >= 0 && x <= w && y >= 0 && y <= h) {
window.focus();
return false;
}
}
}
这段是标准代码,我不清楚你说的死循环是什么需求产生的?
e = e || window.event;
if (window.ActiveXObject && /MSIE/.test(navigator.userAgent)) { //IE
//如果 blur 事件是窗口内部的点击所产生,返回 false, 也就是说这是一个假的 blur
var x = e.clientX;
var y = e.clientY;
var w = document.body.clientWidth;
var h = document.body.clientHeight;
if (x >= 0 && x <= w && y >= 0 && y <= h) {
window.focus();
return false;
}
}
}
这段是标准代码,我不清楚你说的死循环是什么需求产生的?
更多追问追答
追问
我做了个在线编辑Office的功能 集成了一个Office控件 用这个方法进入Office界面后 每点击页面一下 就会执行window.focus();一次 return false;没起到作用 不知道什么情况了
追答
应该是其他问题 这段代码的意思是
当窗口失去焦点,如果是IE浏览器,判断失去焦点的事件是否在窗口内部,如果在窗口内部,说明失去焦点的不是IE窗口,窗口获得焦点,同时阻止窗口的onblur事件触发。
因为这是IE的BUG,或者IE对与onblur事件会一直冒泡到window对象,其他浏览器不会。这段代码就是针对IE写的,如果你需要全功能,需要补全上面的代码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |