变通解决firefox3不能使用window.close();关闭浏览器

 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++的接口:

 

  1. package closewin;
  2. public class CloseWin
  3. {
  4.     public native static void closeWinJava();     
  5. }

  2)CMD下用javah命令生成用于VC++调用的头文件;

       java Closewin.java

       javah closewin.CloseWin

 3) 打开VC++,新建一个dll,新建一个class,取名CloseWin;导入刚才生成的.h文件,新建一个cpp文件;

   CloseWin.h

  1. /* DO NOT EDIT THIS FILE - it is machine generated */
  2. #include <jni.h>
  3. /* Header for class closewin_CloseWin */
  4. #ifndef _Included_closewin_CloseWin
  5. #define _Included_closewin_CloseWin
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9. /*
  10.  * Class:     closewin_CloseWin
  11.  * Method:    closeWinJava
  12.  * Signature: ()V
  13.  */
  14. JNIEXPORT void JNICALL Java_closewin_CloseWin_closeWinJava
  15.   (JNIEnv *, jclass);
  16. #ifdef __cplusplus
  17. }
  18. #endif
  19. #endif

CloseWin.cpp

 

  1. // CloseWin.cpp: implementation of the CloseWin class.
  2. //
  3. //
  4. #include <windows.h> 
  5. #include <winuser.h>
  6. #include "CloseWin.h"
  7. //
  8. // Construction/Destruction
  9. //
  10. JNIEXPORT void JNICALL Java_closewin_CloseWin_closeWinJava(JNIEnv *env, jclass cls)
  11. {
  12.     /*keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0); 
  13.     keybd_event(VK_F4, MapVirtualKey(VK_F4, 0), 0, 0); 
  14.     keybd_event(VK_F4,MapVirtualKey(VK_F4, 0), KEYEVENTF_KEYUP ,0);
  15.     keybd_event(VK_MENU,MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP ,0);
  16.     */
  17.     HWND hwnd = ::GetForegroundWindow();
  18.     ::SendMessage(hwnd,WM_CLOSE,0,0);
  19. //  ::MessageBox(NULL,"Tom test","Tom",MB_OK);
  20. }

  注意构建途径加上jdk的路径;   Tools->options->Directories->include files:%JAVA_HOME%/include;%JAVA_HOME%/include/win32;

4)Eclipse中修改class

 

  1. package closewin;
  2. public class CloseWin
  3. {
  4.    static
  5.     {
  6.        // System.loadLibrary("CloseWinc");
  7.        System.load("c://CloseWinc");
  8.     }
  9.     public native static void closeWinJava();
  10.     public static void main(String[] args)
  11.     {
  12.       // CloseWin instance = new CloseWin();       
  13.        //instance.closeWinJava();      
  14.     }   
  15.     
  16. }

5)新建一个Servelet,用于jsp页面调用:

  1. package closewin;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. public class invokeCloseWin extends HttpServlet {
  9.      public void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
  10.      {
  11.     
  12.         closewin.CloseWin closewin1=new closewin.CloseWin();
  13.         try
  14.         {
  15.           closewin1.closeWinJava();
  16.         }catch(Exception e)
  17.         {System.out.println(e);}    
  18.     
  19.     }
  20.      protected void doGet(HttpServletRequest request, HttpServletResponse response) 
  21.      throws ServletException, IOException { 
  22.          doPost(request,response);
  23.      } 
  24. }

6)JSP页面采用ajax调用serverlet;

  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
  4. <title>dsdd</title>
  5. </head>
  6. <script language="javascript">
  7. var xmlHttp
  8. function showCustomer(str)
  9.     xmlHttp=GetXmlHttpObject();
  10.     if (xmlHttp==null)
  11.     {
  12.         alert ("Do no support AJAX");
  13.         return;
  14.     } 
  15.     var url=str;
  16.     //xmlHttp.onreadystatechange=stateChanged;
  17.     xmlHttp.open("GET",url,true);
  18.     xmlHttp.send(null);
  19. }
  20. function GetXmlHttpObject()
  21. {
  22.     var xmlHttp=null;
  23.     try{
  24.   // Firefox, Opera 8.0+, Safari
  25.       xmlHttp=new XMLHttpRequest();
  26.      }catch (e) {
  27.   // Internet Explorer
  28.       try
  29.         {
  30.             xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  31.         } catch (e){    
  32.             xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  33.         }
  34.     }
  35.     return xmlHttp;
  36. }
  37. </script>
  38. <body>
  39. <a name="dssd" onClick="" href="javascript:showCustomer('servlets/invokeCloseWin');">close window</a>
  40. </body>
  41. </html>

   大功告成!!!

    

          

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值