Я не могу заставить javascript успешно работать в методе onPageFinished() моего WebViewClient.
Я переношу приложение iOS, и они делают то же самое, ожидая загрузки страницы, а затем используя Javascript, чтобы скрыть некоторые элементы HTML.
Я не очень часто использую Javascript, но не знаю, почему он не работает правильно. Прямо сейчас происходит загрузка страницы, затем вызывается onPageFinished, и страница перезагружается, а в верхнем левом углу появляется текст «none».
Я прикрепил свой WebViewClient, а затем все настройки WebView, которые я делаю в onCreate. Я также включил некоторый закомментированный код того, что я пробовал раньше, и этот код также не работал.
// Manages the behavior when URLs are loaded
private class Browser extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url, headers);
return true;
}
@JavascriptInterface
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
//view.loadUrl("javascript:document.getElementById('navbar_bg').style.display = 'none';");
//webView.loadUrl("javascript:document.getElementById(\"content\")");
view.loadUrl("javascript:document.getElementById(\"navbar_bg\").style.display=\"none\";");
}
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mobile_homework);
ButterKnife.bind(this);
homeworkId = getIntent().getIntExtra(HOMEWORK_ID_EXTRA, 0);
// Configure related browser settings
webView.getSettings().setLoadsImagesAutomatically(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
// Enable responsive layout
webView.getSettings().setUseWideViewPort(true);
// Zoom out if the content width is greater than the width of the viewport
webView.getSettings().setLoadWithOverviewMode(true);
//allow manual zoom and get rid of pinch to zoom
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setDisplayZoomControls(false);
// Configure the client to use when opening URLs
webView.setWebViewClient(new Browser());
}
Редактировать: последнее исправление заключалось в том, чтобы установить переменные для каждого изменения, потому что оно возвращает переменную при изменении любого элемента.
Окончательный рабочий код выглядел так:
view.loadUrl("javascript:var header = document.getElementById('header_bg_first').style.display='none'; " +
"var navbar = document.getElementById('navbar_bg').style.display='none'; " +
"var footer = document.getElementById('footer').style.display='none'; " +
"var iframePadding = document.getElementById('flcn_assignment').style.paddingRight='10px';");