2013-01-20 80 views
0

我想知道是否存在另一种有效方式来获取将加载到WebView上的URL。我目前的代码给出了当前的Url,而不是将要加载的那个。从WebView获取URL

例如,如果我的WebView加载此:http://stackoverflow.com

加载后如果我点击问题,我不会得到这个网址http://stackoverflow.com/questions,由于某种原因我会得到http://stackoverflow.com

所以我的问题是你怎么会得到将被装载在的WebView的网址是什么?

这是我的代码,请帮忙!

import android.app.Activity; 
import android.os.Bundle; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    // Declaring 
    WebView browser; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Initializing 
     browser = (WebView) findViewById(R.id.webView1); 

     browser.getSettings().setJavaScriptEnabled(true); 
     browser.getSettings().setLoadWithOverviewMode(true); 
     browser.getSettings().setUseWideViewPort(true); 
     browser.getSettings().setBuiltInZoomControls(true); 

     // Loading 
     browser.loadUrl("http://stackoverflow.com"); 


     browser.setWebViewClient(new WebViewClient() { 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
        view.loadUrl(url); 

       return true; 
      } 

      public void onLoadResource(WebView view, String url) { 

       //here I get the Url, but its not accurate. Sometimes it works, sometiems it doesn't 
        Toast.makeText(getApplicationContext(), browser.getUrl(), 
          Toast.LENGTH_SHORT).show(); 
      } 


     }); 

    } 

} 
+0

你尝试使用传入'onLoadResource' URL参数? – Henry

+0

你的意思是这个代码? 'browser.getUrl()'如果不是,请告诉我。 – Ammar

回答

5

尝试从这个函数获取网址:

编辑:

 browser.loadUrl("http://stackoverflow.com"); 

     browser.setWebViewClient(new WebViewClient() { 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       Toast.makeText(getApplicationContext(), url, Toast.LENGTH_SHORT).show(); 
       Log.v("TEST", url); 
       if(url.equals("http://stackoverflow.com/questions")){ 
        Toast.makeText(getApplicationContext(), "SKIP", Toast.LENGTH_SHORT).show(); 
       } 
       else{ 
        view.loadUrl(url); 
       }     
       return true; 
      } 
     }); 

参考:

shouldOverrideUrlLoading

+0

这会给我当前的URL而不是将要加载的URL。 – Ammar

+0

@Ammar根据参考它应该工作。 [http://developer.android.com/reference/android/webkit/WebViewClient.html#shouldOverrideUrlLoading%28android.webkit.WebView,%20java.lang.String%29] –

+0

请尝试我的代码,并亲自看看它会不行。它始终为我提供当前的网址。 – Ammar

0

我知道它很迟,但对于其他用户,如果它有帮助,这将是我的请求当然。 在乌尔WebViewClient u可以使用:

private class MyWebViewClient extends WebViewClient { 
 
     @Override 
 
     public boolean shouldOverrideUrlLoading(WebView view, String url) {   
 
      String webUrl=view.getUrl(); 
 
      return true; 
 
     } 
 
    }