Я хочу, чтобы мой веб-просмотр вставлял вид javascript после загрузки страницы. Однако добавленный мной javascript так и не был выполнен :( что я могу с этим сделать?
mWebView = findViewById(R.id.webview);
mWebView.getSettings().setDomStorageEnabled(true);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished (WebView view, String url) {
super.onPageFinished(view, url);
Log.d("WebClient", "onPageFinished");
view.loadUrl("javascript:(function(){"+
"aTagElements=document.getElementsByTagName('a');" +
"randromElement=aTagElements[Math.floor(Math.random() * aTagElements.length)];"+
"clickEvent=document.createEvent('HTMLEvents');"+
"clickEvent.initEvent('click',true,true);"+
"randromElement.dispatchEvent(clickEvent);" +
"alert('event dispatched.');"+ //<---not called
"})()");
}
});
Даже если я закомментирую все скрипты, кроме строки alert, все равно ничего не произойдет.
@ManojPerumarath, какой бы ни был URL, мой код не работает.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте приведенное ниже решение, возможно, оно сработает для вас.
WebSettings webSettings = webView.getSettings();
webSettings.setDefaultTextEncodingName("utf-8");
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setLoadWithOverviewMode(true);
Вам придется использовать это на стороне приложения
mWebView .addJavascriptInterface(new WebAppInterface(this), "Android");
и придется реализовать метод на стороне php, где на самом деле этот метод будет запускаться
public class WebAppInterface {
Context mContext;
/** Instantiate the interface and set the context */
WebAppInterface(Context c) {
mContext = c;
}
/** Show a toast from the web page */
@JavascriptInterface
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
}
на PHP Side реализовать вот так
<input type = "button" value = "Say hello" onClick = "showAndroidToast('Hello Android!')" />
<script type = "text/javascript">
function showAndroidToast(toast) {
Android.showToast(toast);
}
</script>
Для полной справки вы можете пройти по эта ссылка
Всякий раз, когда вы нажимаете кнопку webView, вы получаете сообщение
Мой код предназначен для создания поведения «щелчок» в загруженном HTML, этот пример может мне не подойти. Спасибо за ваши усилия.
@SimonLeung, stackoverflow.com/questions/32163517/…
@Simon Leung, в чем проблема сейчас?
Вставка javascript после загрузки страницы. AssessmentJavascript дает мне обратный вызов, но javascript не запускается.
Попробуйте использовать evaluvateJavascript, loadUrl будет работать только в старой версии.
webview.evaluateJavascript("(function() { "javascript:(function(){"+
"aTagElements=document.getElementsByTagName('a');" +
"randromElement=aTagElements[Math.floor(Math.random() * aTagElements.length)];"+
"clickEvent=document.createEvent('HTMLEvents');"+
"clickEvent.initEvent('click',true,true);"+
"randromElement.dispatchEvent(clickEvent);" +
"alert('event dispatched.');";
он принимает 2 параметра, а второй - обратный вызов значения. Я помещаю журнал в обратный вызов, и он показывает журнал, но javascript (даже предупреждающий) не выполняется.
вы пробовали это только с помощью оповещения?
Я попробовал простой HTML-код, сделанный самостоятельно, и теперь он работает! Я хватаю 2 вещи, которые вводят меня в заблуждение. 1) пользователи не могут видеть сгенерированные события щелчка 2) функция оповещения работает в моем простом html, возможно, оповещение было заблокировано другими веб-сайтами, которые, как я думал, скрипт не работает.
Вы смешиваете взгляды. Так изменить
super.onPageFinished(view, url);
К
super.onPageFinished(mWebView, url);
Где находится URL-адрес веб-страницы, которую вы хотите загрузить