Tôi đang cố gắng để phát triển một custom browser
với WebView
sử dụng Android API level 10
(sdk 2.3.3), tiếc là tôi không biết làm thế nào để ngăn chặn yêu cầu từ webpage
để mở URL trong cửa sổ trình duyệt mới, như nhấn vào liên kết với target="_blank"
.WebView + Phương pháp WebChromeClient onCreateWindow không kêu gọi target = "_ blank"
Phù hợp với API Doc
Tôi đã ghi đè số onCreateWindow
của WebChromeClient
, nhưng không được gọi khi liên kết đó được khai thác. Có thể là lỗi của cấp API này? Tôi cũng ghi đè shouldOverrideUrlLoading
để tránh WebView
mở các liên kết tiếp theo trong trình duyệt tích hợp sẵn.
Đây là mã mẫu của tôi mở ra google.com
. Để kiểm tra, nhấn "Tin tức" và sau đó nhấn vào bất kỳ tiêu đề tin tức nào. Trình duyệt tích hợp Android thường mở nó trong một browser window
mới.
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");
}
}
Lotzy, onCreateWindow sẽ được gọi chỉ khi bạn trở thành sự thật từ shouldOverrideUrlLoading. Dường như là một lỗi xem web, bởi vì trong hầu hết các trường hợp, bạn không thể trả về false từ shouldOverride ... – myself
Vâng, như bạn có thể thấy có sự trở lại đúng; trong phương thức shouldOverrideUrlLoading. – Lotzy