在webview上设置loadURLTImeOutValue

我正在使用phonegap和Android,并在外部服务器上有我的.html和js文件。 当我使用下面的代码,该应用程序加载我的外部.html文件,一切工作正常:

this.setIntegerProperty("loadUrlTimeoutValue", 60000); this.loadUrl("http://www.myserver.com"); 

但是,当通过webview工作,我似乎无法设置webView的loadURLTimeoutValue:

  private WebView webView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { webView = (WebView) findViewById(R.id.webview); webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); webView.loadUrl("http://www.myserver.com"); } 

这不起作用。 我如何设置webview的超时值?

Solutions Collecting From Web of "在webview上设置loadURLTImeOutValue"

这是模拟所描述的行为的解决方法。 您可以使用WebViewClient ,并覆盖onPageStarted方法:

 public class MyWebViewClient extends WebViewClient { boolean timeout; public MyWebViewClient() { timeout = true; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } if(timeout) { // do what you want } } }).start(); } @Override public void onPageFinished(WebView view, String url) { timeout = false; } } 

如果超时,您可以加载,例如,一个错误页面…

要将WebViewClient添加到您的WebView ,只需执行以下操作:

 webView.setWebViewClient(new MyWebViewClient()); 

我用这个来为我的WebView设置一个时间:

 public class MyWebViewClient extends WebViewClient { boolean timeout = true; @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Runnable run = new Runnable() { public void run() { if(timeout) { // do what you want showAlert("Connection Timed out", "Whoops! Something went wrong. Please try again later."); } } }; Handler myHandler = new Handler(Looper.myLooper()); myHandler.postDelayed(run, 5000); } @Override public void onPageFinished(WebView view, String url) { timeout = false; } } 

改变默认超时的正确方法是在config.xml文件中使用标签<preference /> ,例如:

 <preference name="loglevel" value="DEBUG" /> <preference name="loadUrlTimeoutValue" value="60000" /> <preference name="errorUrl" value="file:///android_asset/www/connection_error.html" /> 

有关更多首选项,请参阅Androidconfiguration 。

如果你扩展CordovaWebView,你应该为了获得phonegap API,你可以使用下面的代码:

 this.getIntent().putExtra("loadUrlTimeoutValue", 60000); 

在内部,CordovaWebView实现了一个类似于上一篇文章中提出的超时机制(默认timeout = 2000)。

请注意,这不是一个logging的界面,所以它可能会在未来打破。

 WebView mWebView = findViewById(R.id.web_view); mWebView.setWebViewClient(new WebViewClient() { private final Handler handler = new Handler(); private volatile boolean timeout; @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); timeout = true; new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } if(timeout) { handler.post(new Runnable() { @Override public void run() { // do what you want with UI } }); } } }).start(); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); timeout = false; } });