diff --git a/www/js/scan.js b/www/js/scan.js
index bb0a001..f331281 100644
--- a/www/js/scan.js
+++ b/www/js/scan.js
@@ -33,13 +33,11 @@
                     } 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
@@ -66,24 +64,57 @@
         });
     },
     goPage: function() {
-        QRScanner.destroy();
+        //QRScanner.destroy();
         window.location = "main.html"
     }
 };
 app.initialize();
-var inAppBrowserRef;
-function showRet(url) {
-    if(isEmpty(url)){
-        return;
-    }
-    var userid = window.localStorage.getItem("userid"); 
+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;
     }
+  }
+  var ref = cordova.InAppBrowser.open(url, '_blank',"location=yes,beforeload=yes");
+  ref.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.InAppBrowser.open(params.url, '_blank',"location=yes,beforeload=yes");
+           neRef.addEventListener('exit', function(e){
+               ref.close();
+               window.location = "main.html"
+           });
+       }
+     }
+  });
+}
+
+function showRet(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;
+        }
+    }
     console.log(url)
-    inAppBrowserRef = cordova.ThemeableBrowser.open(url, '_blank', {
+    var inAppBrowserRef = cordova.ThemeableBrowser.open(url, '_blank', {
         statusbar: {
             color: '#03a9f4ff'
         },
@@ -108,19 +139,25 @@
             event: 'closePressed'
         },
         backButtonCanClose: true
-    }).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);
-    });
-    inAppBrowserRef.addEventListener('loadstart', loadStartCallBack);
-    inAppBrowserRef.addEventListener('beforeload', beforeloadCallBack);
+    }).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"
+           });
+       }
+     }
+  });
+    //inAppBrowserRef.addEventListener('loadstart', loadStartCallBack);
+    //inAppBrowserRef.addEventListener('beforeload', beforeloadCallBack);
 }
 function loadStartCallBack(params,callback) {
     console.log("1",params.url);
