[英]Android Webview - Change Elements with Javascript after page finished loading
I want to change some values on a HTML Page, using Javascript in a Webview.我想更改 HTML 页面上的一些值,在 Webview 中使用 Javascript。 I tried many different ways to evaluate Javscript after page finished loading.
页面加载完成后,我尝试了许多不同的方法来评估 Javscript。
Here is my code:这是我的代码:
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setBlockNetworkImage(false);
webview.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
public void onPageFinished(WebView view, String url) {
webview.loadUrl("javascript:(function() { document.getElementById('options').value = '" + found.getId() + "'; ;})()");
button.performClick();
}
});
I think it means, that the method is called to early, before page is fully loaded.我认为这意味着该方法在页面完全加载之前被提前调用。 Do you have any ideas?
你有什么想法?
in order to change value / content / styling in HTML using javascript also known as DOM Manipulate , then we have waiting after DOM ready or fully loaded.为了使用 javascript 也称为DOM Manipulate更改 HTML 中的值/内容/样式,然后我们在 DOM 准备好或完全加载后等待。 In this case, we load the page into widget WebView and then do our business.
在这种情况下,我们将页面加载到小部件WebView 中,然后执行我们的业务。
I have a sample code that I always use in the same case,我有一个示例代码,我总是在相同的情况下使用,
...
final String url = "http://example.com";
final WebView webview = findViewById(R.id.my_webview);
final String myNewValue = "it works!";
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebChromeClient(new WebChromeClient());
webview.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
// Your custom javascript here
String myCustomJS = "document.getElementById('options').innerHTML = '" +
myNewValue + "'";
// here we execute the javascript code
webview.loadUrl("javascript:(function(){" + myCustomJS + "})()");
}
});
// and here we load the url
webview.loadUrl(url);
...
I hope the code above can help you to continue working..我希望上面的代码可以帮助您继续工作..
Update for Waiting DOM Ready
等待 DOM 就绪的更新
If you have use jQuery before, then you must know如果您之前使用过 jQuery ,那么您一定知道
// example 1: jQuery way
$(document).ready(function() {
// place our logic here
});
// example 2: native javascript way
document.addEventListener('DOMContentLoaded', function() {
// place our logic here
});
Im use this trick to manipulate page in WebView after DOM ready (in example 2 native JS way).我使用这个技巧在 DOM 准备好后操作 WebView 中的页面(在示例 2原生 JS 方式中)。
Another question why not using runnable?另一个问题为什么不使用runnable?
because we never know internet speed users, let say if we set runnable to wait
3000ms
or3sec
but the web not responding after runnable execution.因为我们从来不知道网速用户,假设我们将 runnable 设置为等待
3000ms
或 3sec 但3sec
在 runnable 执行后没有响应。 What happened next?接下来发生了什么? users will have white blank screen and keep waiting.
用户将有白色的空白屏幕并继续等待。
hope this more clear now.希望现在更清楚。
reference link: https://developer.mozilla.org/.../DOMContentLoaded_event参考链接: https://developer.mozilla.org/.../DOMContentLoaded_event
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.