2013-02-02 212 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。 –

相關問題