如何在Android WebView中修改DOM?

时间:2016-08-31 08:39:41

标签: javascript android webview

我需要在Android WebView中修改页面DOM(使用id或classname隐藏一些元素,并替换函数或CSS样式的一些默认impls)。我试图在WebViewClient.onPageLoaded中注入javascript:

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        getSupportActionBar().setTitle("Finishing ");
        getSupportActionBar().setSubtitle(url);
        view.loadUrl("javascript:alert('hello world 2');");
        getSupportActionBar().setTitle("Finished");
    }
});

(通过js显示警报,而不是实际隐藏)。这不是实际需要的,因为所有页面都在未加载时显示。

由于某种原因,onPageStarted中的js加载不起作用 - 它阻止加载原始网址:

webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            getSupportActionBar().setTitle("Started ");
            getSupportActionBar().setSubtitle(url);

            webView.evaluateJavascript("alert('hello world 1');", null);
            // view.loadUrl("javascript:alert('hello world 1');") prevents too
        }

是否可以在页面开始加载之前注入JS ?在WebView

中有任何关于DOM事件回调的技巧

2 个答案:

答案 0 :(得分:1)

我解决了这样的问题,但我在onPageFinished方法中解决了这个问题。 您可以在DOM操作之前隐藏webview。因此,用户不会受到影响。

 public class WebClient extends WebViewClient {
   ...

        @Override
        public void onPageFinished(WebView view, String url) {

                view.loadUrl("javascript:document.getElementById(\"jumbotron-test\").innerHTML = \"\";void(0);");
                webView.setVisibility(View.VISIBLE);

        }
    }

答案 1 :(得分:0)

你不能在侧面加载之前在DOM中注入JS,因为DOM 渲染的&加载网站。

您可以尝试使用HttpClient httpclient = new DefaultHttpClient();BufferedReader获取网页的源代码,并将其传递到string。之后,您可以修改该字符串并在script - 正文字符串的主体中插入新的html标记:

<script>
    alert("Hey, whats up?");
</script>

现在你的webview可以加载字符串:

webView.loadData(yourHtmlString, "text/html; charset=utf-8", "UTF-8");

它应该加载alert-popup。