2013-02-02 214 views
12

我已经搜索并阅读了很多帖子,但无法弄清楚如何在我的代码中执行此操作。webChromeClient在浏览器中打开链接

我想在我的应用程序使用地理定位和需要查看webChromeClient在webViewClient至极我现在使用的HTML文件和链接不会留在同一个视图代替。

当我将其更改为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); 

回答

2

要打开浏览器链接,您可以使用intentshouldOverrideUrlLoading方法来启动URL在浏览器与使用您的webview处理链接:如果要加载

webView.setWebViewClient(new WebViewClient(){ 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url != null && url.startsWith("http://")) { 
      view.getContext().startActivity(
       new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
      return true; 
     } else { 
      return false; 
     } 
    } 
} 

在webview中使用:

WebViewClient yourWebClient = new WebViewClient() 
{ 
    // Override page so it's load on my view only 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) 
    { 
     // This line we let me load only pages with an anchor tag 
     if (url.contains("url") == true) 
      //Load new URL Don't override URL Link 
     return false; 

    // Return true to override url loading (In this case do nothing). 
    return true; 
    } 
}; 
+0

对不起,那是相反的。我想要链接,像 Harry

+0

查看我发布的修改。 – Nick

+4

感谢您试图帮助尼克,但我失去了你...你正在为WebViewClient编码,我正在询问WebChromeClient ... – Harry

6

我能够通过设置除WebChromeClient之外的虚拟WebViewClient来解决此问题。不知道为什么,但是当我拿出这行时,网页开始再次在浏览器中打开。

mBrowser.setWebViewClient(new WebViewClient()); 
49

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; 
    } 
}); 
+5

确实解决了我的问题。我认为(我猜很多其他开发人员)应该设置WebChromeClient或WebViewClient,但不能同时设置。 – Bugdr0id

+0

这可以帮助我,我正在考虑通过@ Bugdr0id –

+0

解决我的问题。 在此之前,我尝试了http://developer.android.com/guide/webapps/webview.html,但浏览器仍然是lanches。 –

相关问题