2013-02-02 52 views
12

Tôi đã tìm kiếm và đọc nhiều bài đăng nhưng không thể tìm ra cách thực hiện trong mã của mình.webChromeClient mở liên kết trong trình duyệt

Tôi muốn sử dụng vị trí địa lý trong ứng dụng của mình và cần xem trong webChromeClient thay cho webViewClient mà tôi sử dụng cho các tệp html ngay bây giờ và các liên kết không ở trong cùng một chế độ xem.

Khi tôi thay đổi điều này thành webChromeClient, các liên kết html, như <a href="http://url/file.php?q=123", đột nhiên mở trong trình duyệt!

Làm cách nào để ngăn chặn điều này?

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); 

Trả lời

2

Để mở liên kết trong trình duyệt mà bạn có thể sử dụng một intent trong phương pháp shouldOverrideUrlLoading để khởi động các URL trong một trình duyệt so với sử dụng webview bạn để xử lý liên kết:

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; 
     } 
    } 
} 

Nếu bạn muốn tải trong sử dụng 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

Xin lỗi, nhưng đó là ngược lại. Tôi muốn các liên kết, như Harry

+0

Xem các chỉnh sửa mà tôi đã đăng. – Nick

+4

Cảm ơn bạn đã cố gắng giúp Nick nhưng tôi đã mất bạn ... Bạn đang viết mã cho WebViewClient và tôi đang hỏi về WebChromeClient ... – Harry

6

Tôi có thể giải quyết vấn đề này bằng cách đặt WebViewClient giả ngoài WebChromeClient. Không chắc chắn tại sao, nhưng khi tôi đưa ra dòng này, trang web bắt đầu mở lại trong trình duyệt.

mBrowser.setWebViewClient(new WebViewClient()); 
49

WebChromeClient không chứa phương thức shouldOverrideUrlLoading, WebViewClient. Hãy nhớ rằng "WebView" có thể và không sử dụng cả WebViewClient và WebChromeClient cùng một lúc nếu được chỉ định. WebViewClient thêm các phương thức không có sẵn cho bạn mà không có máy khách nào được chỉ định (giữ điều hướng trong webview). Điều tương tự với WebChromeClient có các phương thức cụ thể mà nó có thể sử dụng (ví dụ như tải tiêu đề trang).

Vì vậy, bạn có thể xây dựng mã của bạn như thế này:

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

đã giải quyết được sự cố của tôi. Tôi giả định (và tôi đoán nhiều nhà phát triển khác) rằng chúng tôi nên đặt WebChromeClient HOẶC WebViewClient, nhưng không phải cả hai. – Bugdr0id

+0

điều này giúp tôi, tôi đã suy nghĩ như đã nói @ Bugdr0id –

+0

Giải quyết vấn đề của tôi. Trước đó, tôi đã thử http://developer.android.com/guide/webapps/webview.html, nhưng trình duyệt vẫn còn lanches. –

Các vấn đề liên quan