मैं विकसित करने के लिए कोशिश कर रहा हूँ के लिए नहीं बुलाया एक custom browser
WebView
उपयोग करने के साथ एंड्रॉयड API level 10
(SDK 2.3.3), दुर्भाग्य से मैं कैसे webpage
से अनुरोध रोकना नहीं जानते नई ब्राउज़र विंडो में खुले यूआरएल, जैसे target="_blank"
के साथ लिंक पर टैप।WebView + WebChromeClient विधि onCreateWindow target = "_ blank"
API Doc
के अनुरूप होने पर मैंने WebChromeClient
पर ओवरराइड किया है, लेकिन इस तरह के लिंक को टैप करने पर कॉल नहीं किया जाता है। इस एपीआई स्तर की एक बग हो सकता है? WebView
से बचने वाले ब्राउज़र में आने वाले लिंक खोलने से बचने के लिए मैं shouldOverrideUrlLoading
को ओवरराइड कर रहा हूं।
मेरा नमूना कोड है जो google.com
खुलता है। इसका परीक्षण करने के लिए, "समाचार" टैप करें और फिर किसी भी समाचार शीर्षक पर टैप करें। एंड्रॉइड अंतर्निर्मित ब्राउज़र सामान्य रूप से इसे नए browser window
में खुलता है।
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 कहा जाता हो जाएगा केवल यदि आप shouldOverrideUrlLoading से सच लौट आते हैं। एक वेब व्यू बग लगता है, क्योंकि ज्यादातर मामलों में आप shouldOverride से झूठी वापसी नहीं कर सकते हैं ... – myself
ठीक है, जैसा कि आप देख सकते हैं कि एक वापसी सही है; चाहिएOverrideUrlLoading विधि में। – Lotzy