【问题标题】:Android webview issue with link filtering链接过滤的Android webview问题
【发布时间】:2011-04-19 17:40:39
【问题描述】:

希望有人能指出我哪里厚。

我正在调用 webviewclient 并覆盖加载以捕获 mailto 链接(有效)和特定的外部 URL(无效)。特定链接只是在浏览器中启动非移动站点链接。我很想弄清楚这一点。

 public boolean shouldOverrideUrlLoading(WebView view, String url) {         
     if (url.startsWith("mailto:")) {                    
        url = url.replaceFirst("mailto:", "");
            url = url.trim();
            try {
            url = URLDecoder.decode(url,"UTF-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
    int subjectStart = url.indexOf("subject=");
            int subjectStop = url.indexOf("&body=");
            String subject = url.substring(subjectStart,subjectStop);
            subject = subject.replace("subject=", "");
            String bod = url.substring(subjectStop);
            bod = bod.replace("&body=", "");
            Intent i = new Intent(Intent.ACTION_SEND);
            i.setType("test/plain");
            i.putExtra(Intent.EXTRA_SUBJECT,subject);               
            i.putExtra(Intent.EXTRA_TEXT, bod);
            startActivity(i);
            return true;

 } else if ( url.contains("[EXTERNAL LINK I WANT TO OPEN IN BROWSER]") == true ) {
    //tried without intent and nothing
     Uri uri = Uri.parse(url.toString());
     Intent browserIntent = new Intent(Intent.ACTION_VIEW, uri);
     startActivity(browserIntent);

     return false; //tried true here too

 } else { 
     view.loadUrl(url);
     return true;
     }
 }

 [...]

我尝试在那里玩 return true 和 return false,我尝试了一个没有浏览器意图的版本。几乎所有人都会在 web 视图而不是浏览器中打开链接,而那些没有打开的链接,什么也没做。

mailto 运行良好,我在外部链接上缺少什么?

如果你需要,我是这样称呼 webclient 的。

public class MyWebViewClient extends WebViewClient {
    @Override
     public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
     switcher = (ViewSwitcher) findViewById(R.id.profileSwitcher);
     WebView webView = (WebView) findViewById(R.id.webview);
     webView.getSettings().setJavaScriptEnabled(true);
     webView.loadUrl("[MY SITE]");
     webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
     webView.setWebViewClient(new MyWebViewClient()
     {
         public void onPageFinished(WebView view, String url) {
             if (REFRESH_WEB ==1){
             startScan();
             REFRESH_WEB++;
             }
                }
     });

【问题讨论】:

  • 尝试使用 Log 记录检索到的每个 URL,并查看您的 contains() 调用哪里出错了。

标签: android webview webviewclient


【解决方案1】:

您第一次编写了它,当您想在浏览器中启动时应该返回 true,而且您正在对 mailto 方案做一些额外的工作。您可以只使用内置的 MailTo 类。此外,在 @CommonsWare 上 +1 评论可以确定这是否不适合您。

public boolean shouldOverrideUrlLoading(Webview view, String url){

      if(url.startsWith("mailto:"){
           MailTo mt = MailTo.parse(url);
           //populate intent with mt.getSubject(), mt.getBody(), etc
           //start activity
           return true;
      }
      else if(url.contains("youtube.com")){
           Uri uri = Uri.parse(url.toString());
           Intent browserIntent = new Intent(Intent.ACTION_VIEW, uri);
           startActivity(browserIntent);
           return true;
      }
      else return false;
}

【讨论】:

    猜你喜欢
    • 2012-03-22
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多