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内置浏览器通常会在新的浏览器窗口中打开.

  1. package com.myexample;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.os.Message;
  6. import android.util.Log;
  7. import android.webkit.WebChromeClient;
  8. import android.webkit.WebView;
  9. import android.webkit.WebViewClient;
  10. import android.widget.Toast;
  11.  
  12. public class HelloAndroidActivity extends Activity {
  13.  
  14. private static String TAG = "WebViewTest";
  15. private WebView mWebView;
  16.  
  17. @Override
  18. public void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. Log.i(TAG,"onCreate");
  21. setContentView(R.layout.main);
  22.  
  23. mWebView = (WebView) findViewById(R.id.mywebview);
  24.  
  25. mWebView.setWebViewClient(new WebViewClient() {
  26. @Override
  27. public boolean shouldOverrideUrlLoading(WebView view,String url) {
  28. view.loadUrl(url);
  29. return true;
  30. }
  31. });
  32.  
  33. mWebView.setWebChromeClient(new WebChromeClient() {
  34. @Override
  35. public boolean onCreateWindow(WebView view,boolean dialog,boolean userGesture,Message resultMsg) {
  36. Toast.makeText(getApplicationContext(),"OnCreateWindow",Toast.LENGTH_LONG).show();
  37. return true;
  38. }
  39. });
  40. mWebView.loadUrl("http://www.google.com");
  41. }
  42.  
  43. }

解决方法

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

然后注册一个WebChromeClient并覆盖onCreateWindow

  1. webView.setWebChromeClient(new WebChromeClient() {
  2. @Override public boolean onCreateWindow(WebView view,Message resultMsg)
  3. {
  4. WebView newWebView = new WebView(getContext());
  5. addView(newWebView);
  6. WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
  7. transport.setWebView(newWebView);
  8. resultMsg.sendToTarget();
  9. return true;
  10. }
  11. });

猜你在找的Android相关文章