变通解决firefox3不能使用window.close();关闭浏览器
2008-10-20 16:28
645 查看
Firefox新版本默认情况下是不允许脚本随便关闭浏览器窗口,window.close只能关闭window.open出来的窗口。对于直接从浏览器打开的窗口无法关闭,
可以设置firefox的参数来关闭窗口:about:config
dom.allow_scripts_to_close_windows
把false修改為true
但是在实际的应用中,不可能去让用户更改浏览器的设置。
另外一种变通的方法解决此问题的思路:firefox并不能限制windows底层去关闭浏览器。因此用vc++写一个关闭浏览器的dll。
在java中调用它即可;
java调用dll:
1).Eclipse 中新建一个class,声明c++的接口:
package closewin;
public class CloseWin
{
public native static void closeWinJava();
}
2)CMD下用javah命令生成用于VC++调用的头文件;
java Closewin.java
javah closewin.CloseWin
3) 打开VC++,新建一个dll,新建一个class,取名CloseWin;导入刚才生成的.h文件,新建一个cpp文件;
CloseWin.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class closewin_CloseWin */
#ifndef _Included_closewin_CloseWin
#define _Included_closewin_CloseWin
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: closewin_CloseWin
* Method: closeWinJava
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_closewin_CloseWin_closeWinJava
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
CloseWin.cpp
// CloseWin.cpp: implementation of the CloseWin class.
//
//////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <winuser.h>
#include "CloseWin.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
JNIEXPORT void JNICALL Java_closewin_CloseWin_closeWinJava(JNIEnv *env, jclass cls)
{
/*keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0);
keybd_event(VK_F4, MapVirtualKey(VK_F4, 0), 0, 0);
keybd_event(VK_F4,MapVirtualKey(VK_F4, 0), KEYEVENTF_KEYUP ,0);
keybd_event(VK_MENU,MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP ,0);
*/
HWND hwnd = ::GetForegroundWindow();
::SendMessage(hwnd,WM_CLOSE,0,0);
// ::MessageBox(NULL,"Tom test","Tom",MB_OK);
}
注意构建途径加上jdk的路径; Tools->options->Directories->include files:%JAVA_HOME%/include;%JAVA_HOME%/include/win32;
4)Eclipse中修改class
package closewin;
public class CloseWin
{
static
{
// System.loadLibrary("CloseWinc");
System.load("c://CloseWinc");
}
public native static void closeWinJava();
public static void main(String[] args)
{
// CloseWin instance = new CloseWin();
//instance.closeWinJava();
}
}
5)新建一个Servelet,用于jsp页面调用:
package closewin;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class invokeCloseWin extends HttpServlet {
public void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
{
closewin.CloseWin closewin1=new closewin.CloseWin();
try
{
closewin1.closeWinJava();
}catch(Exception e)
{System.out.println(e);}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
}
6)JSP页面采用ajax调用serverlet;
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>dsdd</title>
</head>
<script language="javascript">
var xmlHttp
function showCustomer(str)
{
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
{
alert ("Do no support AJAX");
return;
}
var url=str;
//xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
function GetXmlHttpObject()
{
var xmlHttp=null;
try{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}catch (e) {
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
} catch (e){
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
</script>
<body>
<a name="dssd" onClick="" href="javascript:showCustomer('servlets/invokeCloseWin');">close window</a>
</body>
</html>
大功告成!!!
可以设置firefox的参数来关闭窗口:about:config
dom.allow_scripts_to_close_windows
把false修改為true
但是在实际的应用中,不可能去让用户更改浏览器的设置。
另外一种变通的方法解决此问题的思路:firefox并不能限制windows底层去关闭浏览器。因此用vc++写一个关闭浏览器的dll。
在java中调用它即可;
java调用dll:
1).Eclipse 中新建一个class,声明c++的接口:
package closewin;
public class CloseWin
{
public native static void closeWinJava();
}
2)CMD下用javah命令生成用于VC++调用的头文件;
java Closewin.java
javah closewin.CloseWin
3) 打开VC++,新建一个dll,新建一个class,取名CloseWin;导入刚才生成的.h文件,新建一个cpp文件;
CloseWin.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class closewin_CloseWin */
#ifndef _Included_closewin_CloseWin
#define _Included_closewin_CloseWin
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: closewin_CloseWin
* Method: closeWinJava
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_closewin_CloseWin_closeWinJava
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
CloseWin.cpp
// CloseWin.cpp: implementation of the CloseWin class.
//
//////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <winuser.h>
#include "CloseWin.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
JNIEXPORT void JNICALL Java_closewin_CloseWin_closeWinJava(JNIEnv *env, jclass cls)
{
/*keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0);
keybd_event(VK_F4, MapVirtualKey(VK_F4, 0), 0, 0);
keybd_event(VK_F4,MapVirtualKey(VK_F4, 0), KEYEVENTF_KEYUP ,0);
keybd_event(VK_MENU,MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP ,0);
*/
HWND hwnd = ::GetForegroundWindow();
::SendMessage(hwnd,WM_CLOSE,0,0);
// ::MessageBox(NULL,"Tom test","Tom",MB_OK);
}
注意构建途径加上jdk的路径; Tools->options->Directories->include files:%JAVA_HOME%/include;%JAVA_HOME%/include/win32;
4)Eclipse中修改class
package closewin;
public class CloseWin
{
static
{
// System.loadLibrary("CloseWinc");
System.load("c://CloseWinc");
}
public native static void closeWinJava();
public static void main(String[] args)
{
// CloseWin instance = new CloseWin();
//instance.closeWinJava();
}
}
5)新建一个Servelet,用于jsp页面调用:
package closewin;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class invokeCloseWin extends HttpServlet {
public void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
{
closewin.CloseWin closewin1=new closewin.CloseWin();
try
{
closewin1.closeWinJava();
}catch(Exception e)
{System.out.println(e);}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
}
6)JSP页面采用ajax调用serverlet;
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>dsdd</title>
</head>
<script language="javascript">
var xmlHttp
function showCustomer(str)
{
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
{
alert ("Do no support AJAX");
return;
}
var url=str;
//xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
function GetXmlHttpObject()
{
var xmlHttp=null;
try{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}catch (e) {
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
} catch (e){
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
</script>
<body>
<a name="dssd" onClick="" href="javascript:showCustomer('servlets/invokeCloseWin');">close window</a>
</body>
</html>
大功告成!!!
相关文章推荐
- 解决firefox浏览器下,window.close()不能关闭容器的兼容性问题
- 解决Firefox中有时使用window.close()脚本无法关闭当前窗口的方法
- firefox浏览器不能使用window.close的解决方案
- 解决JS:window.close()在Firefox下的不能关闭的问题,兼容IE/Firefox/Chrome
- 解决JS:window.close()在Firefox下的不能关闭的问题
- 解决JS:window.close()在Firefox下的不能关闭的问题
- firefox浏览器不能使用window.close的解决方案
- JavaScript中的window.close在FireFox和Chrome上不能正常动作的解决方法
- Firefox中无法使用window.close()关闭窗口
- 网页关闭(解决window.close在火狐下不兼容问题) 区分浏览器类别
- JavaScript中的window.close在FireFox和Chrome上不能正常动作的解决方法
- js实现关闭本页面,window.close()真的不能关闭chorm浏览器的页面吗?
- JS使用window.close()关闭当前页(兼容firefox)
- 使用window.open()方式打开新页面,关闭后浏览器不能释放资源,需要等待主界面关闭后才能释放
- JS使用window.close()关闭当前页(兼容firefox)
- 解决windown.close 在firefox不能关闭的问题
- window.showModalDialog()方法在Chrome下不能使用的解决方法
- 使用了代理服务器之后突然浏览器不能打开网页的解决方法
- 使用window live writer 解决写博客图片不能粘贴
- JS无提示关闭浏览器窗口脚本以及不同浏览器对window.close()不同表现