Android: нажмите ссылку на странице в веб-представлении - PullRequest
4 голосов
/ 23 сентября 2011

Я включил веб-приложение в веб-представление Android, и на веб-странице есть ссылка, которая открывает какой-то другой сайт, при нажатии на ссылку он отлично работает при первом нажатии, однако при повторном нажатии веб-сайтне найден,

код:

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {

    if (url.contains("some site ")) {
     Intent i = new
         Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     startActivity(i);
         return true;
    } else {
    view.loadUrl(url);
    return false;
   }
}

@ THelper и @mikegr, спасибо за ответ,

На самом деле в моем случае у меня естьмодальная панель (JSF) в моем веб-приложении, содержащая несколько кнопок, при нажатии на кнопку я открываю другой сайт с помощью метода javascript window.open (), который прекрасно работает в настольном браузере, однако, когда я оборачиваю это веб-приложение в веб-обозрение Androidвсе работает нормально, за исключением того, что когда я впервые нажимаю эту кнопку, я могу открыть другой сайт с помощью внешнего браузера, однако при втором щелчке веб-просмотр пытается открыть этот другой сайт в веб-обзоре вместо внешнего браузера, и я получаю веб-сайт не найденсо всем URL другого сайта, это происходит, даже когда я выхожу иДжин снова, поскольку запущенное приложение все еще работает.

также в моем случае после того, как какое-то время приложение простаивает, я получаю черный экран.

Я перебрал сеть и обнаружил проблему с аналогами, но этотоже не помогло, вот ссылка:

http://groups.google.com/group/android-for-beginners/browse_thread/thread/42431dd1ca4a9d98

обработка ссылок в веб-просмотре ,

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

, так как я пытаюсь отобразить свое веб-приложение в веб-представлении, у меня есть только одно действие, которое содержит код, подобный этому

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

if (savedInstanceState != null) {
        // so that when launcher is clicked while the application is 
           // running , the application doesn't start from the begnining
} else {

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);

    // Show the ProgressDialog on this thread
        this.progressDialog = ProgressDialog.show(this, "Pleas Wait..", "Loading", true);

    browser = (WebView) findViewById(R.id.webview);
    browser.getSettings().setJavaScriptEnabled(true);

    browser.setWebViewClient(new WebViewClient() {

        public void onPageFinished(WebView view, String url) {
                Log.i(TAG, "Finished loading URL: " +url);

                if (progressDialog.isShowing()) {
                    progressDialog .dismiss();
                }
            }


@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {

if (url.contains("some site")) {
     Intent i = new
     Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     startActivity(i);
             return true;
} else {
        view.loadUrl(url);
    return true;
}
 }
});
browser.loadUrl("mysite");
}
}

Ответы [ 3 ]

1 голос
/ 05 декабря 2011

onPageStarted работал для меня. Пришлось немного его подправить, так как этот метод вызывается, когда веб-представление также отображается впервые, и я хотел выполнить его только на onClick JavaScript-баннера.

Я имитировал баннер с пользовательской страницей, поэтому, когда обрабатывался ad.html, я избегал startActivity. В противном случае запускается новое окно браузера.

WebViewClient newWebClient = new WebViewClient() {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);
            if(!url.equals("http://xxxx.ad.html"))
            view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
        }
    };
1 голос
/ 25 сентября 2011

У меня был опыт, что shouldOverrideUrlLoading () не вызывается при определенных обстоятельствах. Есть несколько ошибок на эту тему на http://code.google.com/p/android/issues как ошибка номер 15827, 9122, 812, 2887

В качестве обходного пути попробуйте добавить метод onPageStarted () и проверьте, получен ли этот вызов. Для меня этот метод всегда вызывается, даже если shouldOverrideUrlLoading () не был вызван раньше.

0 голосов
/ 11 декабря 2014

Попробуйте добавить шаблон системных параметров в URL перед загрузкой, что-то вроде.

String url = "http://xxxx.ad.html?t="+System.nanoTime();

и в вашем методе shouldOverrideUrlLoading () удалите часть запроса (в самой первой строке).

int idx;
if ((idx = url.indexOf("?")) != -1) {
    url = url.substring(0, idx);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...