WebView + WebChromeClient метод onCreateWindow не вызывается для target="_blank"

Я пытаюсь разработать пользовательский браузер с WebView используя Android API level 10 (sdk 2.3.3), к сожалению я не знаю как перехватить запрос от веб-страницыдля открытия URL в новом окне браузера, как тапы по ссылкам с target="_blank".

В соответствии с API Doc я переопределил onCreateWindow из WebChromeClient, но он не вызывается при нажатии на такую ссылку. Может ли это быть ошибкой данного уровня API? Я также переопределяю shouldOverrideUrlLoading, чтобы WebView не открывал последующие ссылки во встроенном браузере.

Вот мой пример кода, который открывает google.com. Чтобы проверить его, нажмите "Новости", а затем нажмите на заголовок любой новости. Встроенный браузер Android обычно открывает ее в новом окне браузера.

package com.myexample;

import android.app.Activity;
import android.os.Bundle;
import android.os.Message;
import android.util.Log;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class HelloAndroidActivity extends Activity {

  private static String TAG = "WebViewTest";
  private WebView mWebView;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i(TAG, "onCreate");
    setContentView(R.layout.main);

    mWebView = (WebView) findViewById(R.id.mywebview);

    mWebView.setWebViewClient(new WebViewClient() {
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
      }
    });

    mWebView.setWebChromeClient(new WebChromeClient() {
      @Override
      public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) {
        Toast.makeText(getApplicationContext(), "OnCreateWindow", Toast.LENGTH_LONG).show();
        return true;
      }
    });
    mWebView.loadUrl("http://www.google.com");
  }

}

11
задан Parth Doshi 20 December 2011 в 16:35
поделиться