2011-12-15 102 views
7

当我点击我应用中的链接时,它们在同一个webview中打开。我希望他们在外部浏览器中打开。Android Webview,使网址在不同的浏览器中打开

我这样做:

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

}); 

返回false使得它在同一网页视图内加载,并返回“真”,使点击一个链接时没有发生。

我看了其他问题,但似乎每个人都有完全相反的问题。 (他们想要链接加载到他们的应用程序)

我做错了什么?

+0

链接是真正的链接(url)还是JavaScript片段? – 2011-12-15 18:22:05

+0

真正的html链接。 – CQM 2011-12-15 19:03:16

回答

12

在你WebViewClient

@Override 
public boolean shouldOverrideUrlLoading(final WebView view, final String url){ 
    if (loadUrlExternally){ 
     Uri uri = Uri.parse(url); 
     Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
     startActivity(intent); 
     return true; //the webview will not load the URL 
    } else { 
     return false; //the webview will handle it 
    } 
} 

这样,它会打开一个新的浏览器窗口,以同样的方式任何其他应用程序将。

1

下面是一个更完整的答案。注意:我是从片段调用的,因此在startActivity()之前调用getActivity()

@Override 
    public boolean shouldOverrideUrlLoading(final WebView view, final String url) 
    { 
     //check if the url matched the url loaded via webview.loadUrl() 
     if (checkMatchedLoadedURL(url)) 
     { 
      return false; 
     } else 
     { 
      getActivity().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
      return true; 
     } 

/** 
    * used to check if the loaded url matches the base url loaded by the fragment(mUrl) 
    * @param loadedUrl 
    * @return true if matches | false if doesn't or either url is null 
    */ 
    private boolean checkMatchedLoadedURL(String loadedUrl) 
    { 
     if (loadedUrl != null && mUrl != null) 
     { 
      // remove the tailing space if exisits 
      int length = loadedUrl.length(); 
      --length; 
      char buff = loadedUrl.charAt(length); 
      if (buff == '/') 
      { 
       loadedUrl = loadedUrl.substring(0, length); 
      } 

      // load the url in browser if not the OTHER_APPS_URL 
      return mUrl.equalsIgnoreCase(loadedUrl); 
     } 
     return false; 
    } 
相关问题