最佳答案
在谷歌上搜索答案的时候,我似乎不是唯一一个被困在一个看起来不可能解决的问题中的人。
我已经设法创建了一个自定义 WebViewClient 的 WebView-这使我有可能有一个进程对话框,并显示一个错误消息,如果一个 URL 无法加载。
但这给 JavaScript 带来了一个问题。我正在加载的 URL 有一些 JavaScript,它可以改变一些 HTML 元素的 CSS 样式(显示或隐藏元素) ,或者重定向到另一个位置单击-或者甚至想要显示一个警告框。但是通过使用 WebViewClient,这些都无法工作。
我是这样加载页面的:
public void loadUrl(String url)
{
final ProgressDialog dialog = ProgressDialog.show(myActivity.this, "", getString(R.string.loading), true);
final WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setVerticalScrollBarEnabled(false);
myWebView.setHorizontalScrollBarEnabled(false);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
myWebView.setWebViewClient(new WebViewClient()
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
Toast.makeText(myActivity.this, url, Toast.LENGTH_SHORT).show(); //Debugging purposes
if (url.endsWith(".mp4"))
{
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "video/mp4");
view.getContext().startActivity(intent);
}
else
{
view.loadUrl(url);
}
return true;
}
public void onPageFinished(WebView view, String url)
{
//Toast.makeText(myActivity.this, "Oh no!", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
{
Toast.makeText(myActivity.this, description, Toast.LENGTH_SHORT).show();
String summary = "<html><body><strong>" + getString(R.string.lost_connection) + "</body></html>";
myWebView.loadData(summary, "text/html", "utf-8");
}
}); //End WebViewClient
myWebView.loadUrl(url);
}
这也许可以用一种更聪明的方式来完成,但我在 Java 和 Android 开发方面都是新手... ..。
我是否有可能为 WebViewClient 启用 JavaScript? 删除 WebViewClient 可以解决这个问题,但是当页面出错或加载完成时,我就无法捕获事件。