简体   繁体   English

Android Webview - 页面加载完成后使用 Javascript 更改元素

[英]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 or 3sec 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.

相关问题 在WebView完成从以前的JavaScript注入加载后,在Android中注入JavaScript - Inject JavaScript in Android after WebView has finished loading from a previous JavaScript Injection 页面加载完成后调用 javascript function? - Invoke a javascript function after page loading is finished? 如何避免在WebView页面加载完成时持续发出警报?Android - How to avoid continuous alert on WebView Page Loading Finished?Android 页面本身完成加载后,更改从按钮加载的元素 - Altering elements that are loaded from buttons after the page itself is finished loading 页面加载完javascript / jquery后执行代码 - Execute code after page has finished loading javascript / jquery Javascript class 成员在页面加载完成后变为 null - Javascript class members become null after page finished loading chrome扩展:页面加载javascript后运行脚本 - chrome extension: run script after page has finished loading javascript 在页面已经完成加载后识别页面完成加载内容 - Identify page finished loading content after page was already finished loading 在Webview中加载页面后无法滚动浏览javascript地图 - Can't scroll through javascript map after loading page in webview 如何在Android Webview中加载网页之前注入javascript? - How inject javascript before the web page loading in Android Webview?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM