diff --git a/www/js/main.js b/www/js/main.js
index 4d55357..e0a358f 100644
--- a/www/js/main.js
+++ b/www/js/main.js
@@ -92,18 +92,18 @@
             })
         });
         $('#secBtn').click(function() {
-            window.location = "security.html";
-            /*app.checkBefore(function() {
+            //window.location = "security.html";
+            app.checkBefore(function() {
                 app.checkOther(function() {
                     window.location = "security.html";
                 })
-            })*/
+            })
         });
-        $("#doorBtn").click(function(){
+        /*$("#doorBtn").click(function(){
             app.checkBefore(function() {
                 showRet(DOOR_URl);
             })
-        })
+        })*/
         $('#usersec').click(function() {
             app.checkBefore(function() {
                 app.checkOther(function() {
diff --git a/www/js/scan.js b/www/js/scan.js
index f331281..cc50c0b 100644
--- a/www/js/scan.js
+++ b/www/js/scan.js
@@ -33,11 +33,13 @@
                     } else {
                         // The scan completed, display the contents of the QR code:
                         QRScanner.destroy();
+                        //$.alert(text, '提示');
                         showRet(text);
                     }
                 }
                 //开始扫描，需要将页面的背景设置成透明
                 QRScanner.show();
+                console.log("QRScanner.scan");
             } else if (status.denied) {
                 // The video preview will remain black, and scanning is disabled. We can
                 // try to ask the user to change their mind, but we'll have to send them
@@ -64,12 +66,12 @@
         });
     },
     goPage: function() {
-        //QRScanner.destroy();
         window.location = "main.html"
     }
 };
 app.initialize();
-function showRet1(url){
+var inAppBrowserRef;
+function showRet(url){
   if(isEmpty(url)){
       return;
   }
@@ -99,22 +101,21 @@
        }
      }
   });
+  //ref.show();
 }
 
-function showRet(url) {
+function showRet1(url) {
     if(isEmpty(url)){
         return;
     }
     var userid = window.localStorage.getItem("userid"); 
-    if (url.indexOf("yy.dlsmk.cn")>=0) {
-        if(url.indexOf("?")>0){
-            url=url+'&userid='+userid;
-        }else{
-            url=url+'?userid='+userid;
-        }
+    if(url.indexOf("?")>0){
+        url=url+'&userid='+userid;
+    }else{
+        url=url+'?userid='+userid;
     }
     console.log(url)
-    var inAppBrowserRef = cordova.ThemeableBrowser.open(url, '_blank', {
+    inAppBrowserRef = cordova.ThemeableBrowser.open(url, '_blank', {
         statusbar: {
             color: '#03a9f4ff'
         },
@@ -127,41 +128,82 @@
             showPageTitle: true
         },
         backButton: {
-            image: 'back.png',
-            imagePressed: 'back.png',
+            wwwImage: 'img/back.png',
+            wwwImagePressed: 'img/back.png',
             align: 'left',
             event: 'backPressed'
         },
         closeButton: {
-            image: 'close.png',
-            imagePressed: 'close.png',
+            wwwImage: 'img/close.png',
+            wwwImagePressed: 'img/close.png',
             align: 'left',
             event: 'closePressed'
         },
         backButtonCanClose: true
-    }).addEventListener('loadstart', function(params){
-     if (params.url.indexOf("yy.dlsmk.cn")>=0) {
-       if (params.url.indexOf("userid")<0) {
-           if(params.url.indexOf("?")>0){
-               params.url=params.url+'&userid='+userid;
-           }else{
-               params.url=params.url+'?userid='+userid;
-           }
-           //ref.hide();
-           var neRef = cordova.ThemeableBrowser.open(params.url, '_blank');
-           neRef.addEventListener('closePressed', function(e){
-               neRef.close();
-               window.location = "main.html"
-           });
-       }
-     }
-  });
+    }).addEventListener('backPressed', function(e) {
+        //alert('back pressed');
+    }).addEventListener('closePressed', function(e) {
+        //alert('closePressed pressed');
+        inAppBrowserRef.close();
+        window.location = "main.html"
+    }).addEventListener(cordova.ThemeableBrowser.EVT_ERR, function(e) {
+        console.error(e.message);
+    }).addEventListener(cordova.ThemeableBrowser.EVT_WRN, function(e) {
+        console.log(e.message);
+    }).addEventListener('loadstart', function(params,e){
+      console.log("11111111"+JSON.stringify(params));
+      if (params.url.indexOf("yy.dlsmk.cn")>=0) {
+        if (params.url.indexOf("userid")<0) {
+            if(params.url.indexOf("?")>0){
+                params.url=params.url+'&userid='+userid;
+            }else{
+                params.url=params.url+'?userid='+userid;
+            }
+            inAppBrowserRef.close();
+            inAppBrowserRef = null;
+            openUrl(params.url);
+        }
+      }
+    });
     //inAppBrowserRef.addEventListener('loadstart', loadStartCallBack);
     //inAppBrowserRef.addEventListener('beforeload', beforeloadCallBack);
 }
-function loadStartCallBack(params,callback) {
-    console.log("1",params.url);
-}
-function beforeloadCallBack(params,callback) {
-    console.log("2",params.url);
+
+function openUrl(url){
+      inAppBrowserRef = cordova.ThemeableBrowser.open(url, '_blank', {
+          statusbar: {
+              color: '#03a9f4ff'
+          },
+          toolbar: {
+              height: 44,
+              color: '#03a9f4ff'
+          },
+          title: {
+              color: '#ffffffff',
+              showPageTitle: true
+          },
+          backButton: {
+              wwwImage: 'img/back.png',
+              wwwImagePressed: 'img/back.png',
+              align: 'left',
+              event: 'backPressed'
+          },
+          closeButton: {
+              wwwImage: 'img/close.png',
+              wwwImagePressed: 'img/close.png',
+              align: 'left',
+              event: 'closePressed'
+          },
+          backButtonCanClose: true
+      }).addEventListener('backPressed', function(e) {
+      }).addEventListener('closePressed', function(e) {
+          inAppBrowserRef.close();
+          window.location = "main.html"
+      }).addEventListener(cordova.ThemeableBrowser.EVT_ERR, function(e) {
+          console.error(e.message);
+      }).addEventListener(cordova.ThemeableBrowser.EVT_WRN, function(e) {
+          console.log(e.message);
+      }).addEventListener('loadstart', function(params,e){
+          console.log("333333"+JSON.stringify(params));
+      });
 }
