2014-10-24 3 views
3

Я добавил плагин InAppBrowser в проект Cordova, чтобы получить доступ к сайту и получить токен, но пока сайт нормально открывается в настольных браузерах, то же самое происходит при открытии с мобильного браузера.Ошибка обхода SSL в InAppBrowser Плагин Cordova

Также встроенный браузер по умолчанию будет просить продолжить в случае ошибки SSL, но Cordova InAppBrowser не запрашивает такую ​​опцию и вместо этого показывает страницу с ошибкой. Я открываю IAB, используя следующий код:

var iab = window.open('http://www.example.com', '_blank', 'location=yes'); 

Любая идея о том, как обойти SSL erros в InAppBrowser?

+0

сделал и решить эту проблему? – hybrid

+0

Не проверял, как функция больше не требуется. Надеюсь, кто-то решил это. –

ответ

6

Я собираюсь расширить ответ на соответствующий вопрос (phonegap inappbrowser https pages not loading). Это относится только к Android, извините, все еще работает на iOS.

Добавьте этот код:

public void onReceivedSslError(WebView view, 
       SslErrorHandler handler, SslError error) { 
     Log.e("Error", "Received SSL error"+ error.toString()); 
     handler.proceed(); 
    } 

в файл InAppBrower.java из плагина. В частности, это должно быть в классе InAppBrowserClient.

Надеюсь, это поможет!

+0

Это было сделано в плагинах/cordova-plug-inappbrowser/src/android/InAppBrower.java ?? –

+1

Да. Фактически я добавил его ниже функции onReveivedError. – caspertm

+0

Я добавил это, но проблема все же есть. Я пытаюсь назвать сам подписанный URL. – hybrid

2

Вставьте правильный код из ниже InAppBrowser.java в свой плагин , расположенном в платформах \ Android \ SRC \ орг \ Apache \ Cordova \ inappbrowser \ InAppBrowser.java

отфильтрованных код из ниже Java кода:

import android.net.http.SslError; 
import android.webkit.SslErrorHandler; 

@SuppressLint("SetJavaScriptEnabled") 
public class InAppBrowser extends CordovaPlugin { 


    private boolean ignoreSSLError = false; 


    private HashMap<String, Boolean> parseFeature(String optString) { 
     if (optString.equals(NULL)) { 
      return null; 
     } else { 
      HashMap<String, Boolean> map = new HashMap<String, Boolean>(); 
      StringTokenizer features = new StringTokenizer(optString, ","); 
      StringTokenizer option; 
      while(features.hasMoreElements()) { 
       option = new StringTokenizer(features.nextToken(), "="); 
       if (option.hasMoreElements()) { 
        String key = option.nextToken(); 
        if(key.equalsIgnoreCase(IGNORE_SSL_ERROR)) { 
         Boolean value = option.nextToken().equals("no") ? Boolean.FALSE : Boolean.TRUE; 
         map.put(key, value); 
        } 
        else { 
         Boolean value = option.nextToken().equals("no") ? Boolean.FALSE : Boolean.TRUE; 
         map.put(key, value); 
        } 

       } 
      } 
      return map; 
     } 
    } 



    public String showWebPage(final String url, HashMap<String, Boolean> features) { 
     // Determine if we should hide the location bar. 
     showLocationBar = true; 
     showZoomControls = true; 
     openWindowHidden = false; 
     ignoreSSLError = false; 
     if (features != null) { 
      Boolean show = features.get(LOCATION); 
      if (show != null) { 
       showLocationBar = show.booleanValue(); 
      } 
      Boolean SSLError = features.get(IGNORE_SSL_ERROR); 
      if(SSLError != null){ 
       ignoreSSLError = SSLError.booleanValue(); 
      } 
      Boolean zoom = features.get(ZOOM); 
      if (zoom != null) { 
       showZoomControls = zoom.booleanValue(); 
      } 
      Boolean hidden = features.get(HIDDEN); 
      if (hidden != null) { 
       openWindowHidden = hidden.booleanValue(); 
      } 
      Boolean hardwareBack = features.get(HARDWARE_BACK_BUTTON); 
      if (hardwareBack != null) { 
       hadwareBackButton = hardwareBack.booleanValue(); 
      } 
      Boolean cache = features.get(CLEAR_ALL_CACHE); 
      if (cache != null) { 
       clearAllCache = cache.booleanValue(); 
      } else { 
       cache = features.get(CLEAR_SESSION_CACHE); 
       if (cache != null) { 
        clearSessionCache = cache.booleanValue(); 
       } 
      } 
     } 


      @SuppressLint("NewApi") 
      public void run() { 

       ((InAppBrowserClient) client).setSSLErrorFlag(ignoreSSLError); 

      } 
     }; 
     this.cordova.getActivity().runOnUiThread(runnable); 
     return ""; 
    } 



    public class InAppBrowserClient extends WebViewClient { 
     EditText edittext; 
     CordovaWebView webView; 
     boolean ignoreSSLError = false; 


     @Override 
     public void onReceivedSslError(WebView view, SslErrorHandler handler, 
             SslError error) { 
      if(this.ignoreSSLError) { 
       handler.proceed(); 
       return; 
      } 
      else{ 
       super.onReceivedSslError(view, handler, error); 
      } 
     } 
     public void setSSLErrorFlag(boolean flag) { 
      this.ignoreSSLError = flag; 
     } 

    } 
} 

THEN ADD THIS LINE IN JAVASCRIPT 

    var options = { 
     location: 'yes', 
     //clearcache: 'no', 
     toolbar: 'yes', 
    //clearsessioncache:'no', 
      zoom:'no', 
      ignoresslerror:'yes' 
    }; 


    $scope.init = function() { 
$ionicPlatform.ready(function() { 
$cordovaInAppBrowser.open('https://192.168.1.80', '_blank', options) 
     .then(function(event) { 
     }) 
     .catch(function(event) { 
     }); 
    }); 

AFTER DONE THIS COMPILE AND EXECUTE THAT'S IT 

FULL VERSION CODE 

Локальные ссылки https заблокированы по умолчанию в InAppBrowser (ссылки с использованием поддельного SSL-сертификата, который не может быть подтвержден сторонним лицом). В идеале пользователю должна быть предоставлена ​​возможность продолжить или отменить запрос, как это делают настольные браузеры по умолчанию.

Прямо сейчас, мы должны дополнительный метод доступа к поддельный SSL в InAppBrowser как место, масштабирование, hardwareback

+0

Не могли бы вы объяснить, что делает код и как он решает проблему? –

+0

получение ошибки в «key.equalsIgnoreCase (IGNORE_SSL_ERROR))» специально в «IGNORE_SSL_ERROR» и «map.put (ключ, значение)»; пожалуйста помоги – Neotrixs

Смежные вопросы