2011-09-23 60 views
4

我已經在android web視圖中包含了一個web應用程序,並且在網頁中有一個鏈接打開了一些其他的網站,當鏈接被點擊時它可以正常工作然而點擊第二次時,該網站沒有找到,Android:點擊網頁視圖中的鏈接

代碼:

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

    if (url.contains("some site ")) { 
    Intent i = new 
     Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    startActivity(i); 
     return true; 
    } else { 
    view.loadUrl(url); 
    return false; 
    } 
} 

@THelper和@mikegr,感謝您的答覆,

其實在我案例我有一個模式面板(JSF)在我的web應用程序中包含一些按鈕,點擊按鈕,我打開一些其他網站使用JavaScript的window.open()方法,它在桌面瀏覽器中正常工作,但是,當我把這個網絡在android webview中的應用程序,一切工作正常,除非我第一次點擊這個按鈕,我可以使用外部瀏覽器打開其他網站,但是第二次點擊webview試圖打開這個在web視圖而不是外部瀏覽器的其他網站,我沒有找到與其他網站的整個網址的網站,即使當我註銷並再次登錄,因爲啓動的應用程序仍在運行時,會發生這種情況。

也在我的情況下,應用程序閒置後,我得到了黑屏。

我通過網絡衝浪,發現呈三角問題,但這並沒有幫助,這裏是鏈接:

http://groups.google.com/group/android-for-beginners/browse_thread/thread/42431dd1ca4a9d98

handling links in a webview

任何幫助和想法將是非常有益的我,這對我來說太長了,

因爲我試圖在web視圖中顯示我的web應用程序,我只有一個活動,它包含這樣的代碼

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

if (savedInstanceState != null) { 
     // so that when launcher is clicked while the application is 
      // running , the application doesn't start from the begnining 
} else { 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.main); 

    // Show the ProgressDialog on this thread 
     this.progressDialog = ProgressDialog.show(this, "Pleas Wait..", "Loading", true); 

    browser = (WebView) findViewById(R.id.webview); 
    browser.getSettings().setJavaScriptEnabled(true); 

    browser.setWebViewClient(new WebViewClient() { 

     public void onPageFinished(WebView view, String url) { 
       Log.i(TAG, "Finished loading URL: " +url); 

       if (progressDialog.isShowing()) { 
        progressDialog .dismiss(); 
       } 
      } 


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

if (url.contains("some site")) { 
    Intent i = new 
    Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    startActivity(i); 
      return true; 
} else { 
     view.loadUrl(url); 
    return true; 
} 
} 
}); 
browser.loadUrl("mysite"); 
} 
} 
+0

您是否添加日誌記錄以查看第二次鏈接是否仍然相同?任何錯誤消息?是否有可能暫時失去了互聯網連接(當模擬器運行一段時間時偶爾會發生這種情況)。 – THelper

回答

1

我有經驗,應該oververUrlLoading()沒有在某些情況下調用。 有關於 http://code.google.com/p/android/issues 這個話題就像bug數15827,9122,812,2887

作爲一種解決辦法一些錯誤嘗試添加()onPageStarted方法和檢查,如果你得到這個電話。對我而言,即使shouldOverrideUrlLoading()之前未被調用,也總是調用此方法。

1

onPageStarted爲我工作。不得不稍微調整一下,因爲這個方法在webview第一次被渲染的時候被調用,我只想在旗幟的javascript的onClick上執行它。

我模擬了一個自定義頁面的橫幅,所以當ad.html被渲染時,我避開了startActivity。否則,它會啓動新的瀏覽器窗口。

WebViewClient newWebClient = new WebViewClient() { 
     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      // TODO Auto-generated method stub 
      super.onPageStarted(view, url, favicon); 
      if(!url.equals("http://xxxx.ad.html")) 
      view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
     } 
    }; 
0

嘗試在URL中追加系統參數模式,然後加載它,類似。

String url = "http://xxxx.ad.html?t="+System.nanoTime(); 

,並在您shouldOverrideUrlLoading()方法取出查詢部分(在第一行)。

int idx; 
if ((idx = url.indexOf("?")) != -1) { 
    url = url.substring(0, idx); 
} 
相關問題