При поиске ответа в Google кажется, что я не единственный, застрявший в проблеме, которая кажется невозможной решить.
Мне удалось создать веб-представление с пользовательским WebViewClient - это позволяет мне иметь processdialog и показать сообщение об ошибке, если URL не мог бы быть загружен.
Но это создает проблему с JavaScript. URL, который я загружаю, имеет некоторый JavaScript, который изменяет некоторые элементы HTML стили CSS (показывающий или скрывающийся элемент) или перенаправляет к другому местоположению onclick - или возможно даже want's для показа окна предупреждений. Но при помощи 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...
Для меня действительно ли возможно включить JavaScript для WebViewClient вообще? Удаление WebViewClient решает проблему, но затем я не могу поймать события, когда ошибки страницы или закончены, загрузившись.
Попробуйте это для включения 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);
Теперь Это должно работать. :)
Что произошло в моем случае: Я служил локальным файлам HTML и при применении
web.getSettings().setJavaScriptEnabled(true);
web.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
, но затем мои URL прекратили работать. Решение сделать и JS и локальную работу href состояло в том, чтобы добавить
web.getSettings().setAllowFileAccess(true);
web.getSettings().setAllowFileAccessFromFileURLs(true);
где
web = (WebView) findViewById(R.id.embedded_web);
Подобный ответу @mdelolmo, но в Kotlin:
webview.setWebChromeClient(WebChromeClient())
webview.setWebViewClient(WebViewClient())
webview.clearCache(true)
webview.clearHistory()
webview.getSettings().setJavaScriptEnabled(true)
webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true)