Phonegap InAppBrowser - кнопка «Назад» не переходит на предыдущую страницу

Я использую Phonegap для своего приложения, и мне нужно отобразить внешнюю ссылку в InAppBrowser, но похоже, что задняя кнопка не работает так, как ожидалось: если я делаю

var ref = window.open('www.example.com/a.html' , '_blank', 'location=no')

со страницы a.html Я щелкнул ссылку на www.example.com/b.html в следующий раз, когда я нажимаю назад, InAppBrowser закрывается, но он должен вернуться в a.html.

Знаете ли вы, как я могу включить «историю навигации» для InAppBrowser?

Спасибо.


person Ungureanu Liviu    schedule 10.12.2013    source источник
comment
Если вы нажмете кнопку «Телефон назад», это приведет вас к предыдущему намерению, а не к предыдущей странице в вашем веб-представлении. Это означает, что вы должны добавить кнопку «Назад» на свою страницу.   -  person Simon Mokhele    schedule 10.12.2013


Ответы (3)


Это возможно путем настройки «InAppBrowser.java». Я знаю, это немного странно, но это единственный выбор, который у меня был. Но те небольшие изменения, которые я внес в java-файл, теперь позволяют мне перемещаться назад по страницам моего приложения.

Вот изменение, которое необходимо внести в InAppBrowser.java. В методе run в методе showWebPage будет примерно такой код слушателя:

dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
                    public void onDismiss(DialogInterface dialog) {     
                        closeDialog();
                    }
});

Ниже этой строки добавьте приведенный ниже код,

dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {                   
@Override
     public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
         if (event.getAction()!=KeyEvent.ACTION_DOWN)
             return true;               
         if(keyCode==KeyEvent.KEYCODE_BACK){
             goBack();
             return true;
         }else {
             return false;
          }
      }
});
person Suresh Raja    schedule 15.05.2014
comment
Действительно полезно, работало как шарм на Cordova 3.0.0 - person code4jhon; 22.07.2014
comment
Я не смог найти dialog.setOnDismissListener(...) в классе InAppBrowser.java. - person Faizan Mubasher; 20.02.2015

Вы можете прослушать кнопку «Назад» (при условии, что вы используете Android) и ввести вызов history.back в InAppBrowser.

document.addEventListener("backbutton", function(){
    //do some checks to make sure the browser is open or 
    //whatever else you may need first, then:
    cordova.exec(null, null, "InAppBrowser", "injectScriptCode", ["history.back()"]);
}, false);
person Uncharted Space    schedule 10.12.2013

В дополнение к тому, что написал @Suresh Raja, указанный код больше не существует. вы можете добавить предложенный улучшенный код (следующий) после этого фрагмента кода:

dialog.setInAppBroswer(getInAppBrowser());

предложенный улучшенный код:

dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {                   
@Override
    public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
          if (event.getAction()!=KeyEvent.ACTION_DOWN)
              return true;               
          if (keyCode==KeyEvent.KEYCODE_BACK){
              if (inAppWebView.canGoBack()) {
                  inAppWebView.goBack();
              }
              else {
                  closeDialog();
              }
              return true;
          } else {
                return false;
          }
     }
});

это закроет приложение после последнего обратного нажатия (что может решить еще одну проблему с inAppBrowser. Надеюсь, это поможет

РЕДАКТИРОВАТЬ: вы должны добавить import android.content.DialogInterface, чтобы получить эту работу.

person TomDov    schedule 12.12.2014