2014-10-01 152 views
0

我有一個奇怪的問題與android的webview。我將一個頁面加載到其中包含鏈接的webview。我已將webview設置爲在同一個webview中(而不是在瀏覽器上)打開該鏈接。當下一頁打開時,它會向mysql寫入一些內容。如果用戶已經在同一天打開第二頁,用戶將被重定向到第一頁,並且沒有東西被寫入到mysql中。我注意到,在第一種情況下,在3-4次中的1次中,鏈接將這些東西寫入mysql兩次(具有相同的時間戳),並將用戶立即重定向到第一頁。所以看起來,當鏈接被點擊時,URL連續打開兩次。一切工作正如我的電腦的瀏覽器(safari,firefox和chrome)。我發現一些文章說圖像上的空src字段可能會導致這種情況,但是我的php/html代碼中沒有空的src字段。android webview中的鏈接打開兩次

Webview是這樣設置:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_description); 

     WebViewClient yourWebClient = new WebViewClient() 
     { 

      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       webView.loadUrl("file:///android_asset/404.html"); 
      } 

      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) 
      { 
      if (url.contains("google") == false) {     
       webView.loadUrl(url); 
       return false; 
      } 
      else { 
       Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
       startActivity(i); 
       return true; 
      }    
      } 
     }; 

     webView = (WebView) findViewById(R.id.description); 
     webView.getSettings().setJavaScriptEnabled(true); 

     if (Build.VERSION.SDK_INT >= 11){ 
      webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
     } 

     String url = (MainActivity.URL+"app/description.php?tagid="+tagId+"&screenwidth="+viewPortWidth+"&screenheight="+viewPortHeight+"&deviceid="+MainActivity.myDeviceId+"&lang="+MainActivity.myLanguage+"&os=android); 

     webView.setWebViewClient(yourWebClient); 
     webView.loadUrl(url); 
    } 

我的鏈接只是一個錨標記內一個典型的DIV(用PHP編寫):

echo '<a href="description.php?type='.$type.'&screenwidth='.$screenWidth.'&screenheight='.$screenHeight.'&tagid='.$tagid.'&no=1&deviceid='.$deviceid.'&lang='.$language.'"> 
<div class="redbutton">'.$lang['NO'].'</div></a>'; 

回答

2

實際上只返回false,網頁會自動加載到WebView。無需使用webView.loadUrl();

if (url.contains("google") == false) {     
       return false; 
      } 

試一試,讓我知道如果不工作。

由於Documentation狀態 -

而返回false表示當前的WebView處理URL

+0

經過測試,它似乎工作。謝謝您的回覆! – Juuso 2014-10-10 21:09:18

+0

如果這是正確的。您可以將其標記爲正確的答案,以幫助未來遇到同樣問題的程序員。 – Darpan 2014-10-11 09:04:54

0

好吧,我發現這樣做的原因。這是原因:

 @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) 
     { 

      if (url.contains("google") == false) { 

      webView.loadUrl(url); 
      return false; // <----THIS LINE 
     } 
     else { 
      Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      startActivity(i); 
      return false; 
     }    
     } 

這應該已經返回true。我發現了這一點,通過這個測試:

@Override   
public void onPageFinished(WebView view, String url) 
      { 

       super.onPageFinished(view, url); 
       String url_new = view.getUrl();     

       Log.v("","Webview url: "+url_new); 

      } 

我注意到,它的每一個,有些鏈接被按下時,打印出來的URL兩次,但它並沒有這樣做,當web視圖加載第一次。當我將return語句更改爲true時,它只會按照它應該做的每次點擊打印一次。

+1

'返回FALSE'是做正確的事。你需要了解這種方式背後的原因。找到我的答案如下.' – Darpan 2014-10-09 10:27:15

相關問題