我搜索并阅读了很多文章,但无法在我的代码中弄清楚该怎么做。
我想在我的应用程序中使用地理位置,并且需要在webChromeClient中查看而不是现在用于html文件的webViewClient,并且链接确实停留在同一 View 中。
当我将其更改为webChromeClient时,html链接(如<a href="http://url/file.php?q=123")突然在浏览器中打开!
我该如何预防呢?

myWebView = new WebView(this);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.getSettings().setLoadWithOverviewMode(true);
myWebView.getSettings().setUseWideViewPort(true);
myWebView.getSettings().setGeolocationEnabled(true);
myWebView.setWebChromeClient(new WebChromeClient() {
public void onGeolocationPermissionsShowPrompt(String origin, android.webkit.GeolocationPermissions.Callback callback) {
        callback.invoke(origin, true, false); }
});
myWebView.loadUrl("file:///android_asset/HTML/index.html");
setContentView(myWebView);

最佳答案

WebChromeClient不包含shouldOverrideUrlLoading方法,而WebViewClient包含。请记住,“WebView”可以并且确实同时使用WebViewClient和WebChromeClient(如果已指定)。 WebViewClient会添加未分配客户端的不可用方法(在webview中保持导航)。与WebChromeClient相同,它具有可以使用的特定方法(例如,获取加载时的页面标题)。

因此,您可以像这样构建代码:

WebView web = (WebView)findViewById(R.id.web);
WebSettings webSettings = web.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setGeolocationEnabled(true);
webSettings.setSupportMultipleWindows(true); // This forces ChromeClient enabled.

web.setWebChromeClient(new WebChromeClient(){
    @Override
    public void onReceivedTitle(WebView view, String title) {
         getWindow().setTitle(title); //Set Activity tile to page title.
    }
});

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

10-06 02:39