在谷歌搜索答案时,似乎我不是唯一一个遇到似乎无法解决的问题的人.
我已经设法使用自定义WebViewClient创建WebView - 这使得我可以拥有processdialog并在无法加载URL时显示错误消息.
但这会产生JavaScript问题.我正在加载的URL有一些JavaScript,它改变了一些HTML元素的CSS样式(显示或隐藏元素)或重定向到另一个位置onclick - 或者甚至想要显示一个警告框.但是通过使用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 = "" + getString(R.string.lost_connection) + ""; myWebView.loadData(summary, "text/html", "utf-8"); } }); //End WebViewClient myWebView.loadUrl(url); }
这可能是以更智能的方式完成的,但我是Java和Android开发的新手......
我可以为WebViewClient启用JavaScript吗?删除WebViewClient解决了问题,但是当页面错误或加载完成后我无法捕获事件.
我不知道你的确切问题是什么,但我可以启用JavaScript和自定义WebViewclient
没有任何问题:
WebView vistaWeb = (WebView) findViewById(R.id.webview); vistaWeb.setWebChromeClient(new MyCustomChromeClient(this)); vistaWeb.setWebViewClient(new MyCustomWebViewClient(this)); vistaWeb.clearCache(true); vistaWeb.clearHistory(); vistaWeb.getSettings().setJavaScriptEnabled(true); vistaWeb.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
试试这个启用JavaScript
WebView myWebView = (WebView) findViewById(R.id.webView); myWebView.getSettings().setJavaScriptEnabled(true); myWebView.setWebViewClient(new WebViewClient()); myWebView.loadUrl(url);
启用JavaScript的正确方法是添加以下两行:
mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
即使添加失败后,也请尝试添加以下行。
mWebView.getSettings().setDomStorageEnabled(true);
现在它应该工作了。:)