android – WebView WebChromeClient方法onCreateWindow不调用target =“_ blank”

前端之家收集整理的这篇文章主要介绍了android – WebView WebChromeClient方法onCreateWindow不调用target =“_ blank”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用 Android API 10(sdk 2.3.3)开发具有WebView的自定义浏览器,不幸的是我不知道如何拦截网页中的请求,以便在新的浏览器窗口中打开URL,例如与target = “_空白”.

根据API文档,我已经覆盖了WebChromeClient的onCreateWindow,但是在点击这样的链接时不会调用它.可能是这个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");
  }

}

解决方法

确保将supportMultipeWindows设置为true.没有它,WebChromeClient的onCreateWindow将永远不会被调用.
WebSettings settings = webView.getSettings();
settings.setSupportMultipleWindows(true);

然后注册一个WebChromeClient并覆盖onCreateWindow

webView.setWebChromeClient(new WebChromeClient() {
        @Override public boolean onCreateWindow(WebView view,Message resultMsg)
        {
            WebView newWebView = new WebView(getContext());
            addView(newWebView);
            WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
            transport.setWebView(newWebView);
            resultMsg.sendToTarget();
            return true;
        }
    });
原文链接:https://www.f2er.com/android/312260.html

猜你在找的Android相关文章