首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android-如何使用evaluateJavascript从Webview获得普通的HTML?JSOUP无法解析结果HTML

Android-如何使用evaluateJavascript从Webview获得普通的HTML?JSOUP无法解析结果HTML
EN

Stack Overflow用户
提问于 2017-07-19 10:16:35
回答 3查看 3K关注 0票数 9

我使用下面的代码来获得HTML,但我没有得到普通的HTML,它包含非转义字符。我使用的是JSOUP解析器,它无法解析这个HTML。

代码语言:javascript
运行
复制
webview.evaluateJavascript(
                        "(function() { return ('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>'); })();",
                        new ValueCallback<String>() {
                            @Override
                            public void onReceiveValue(String html) {
                            }
                        });

我从上面的代码中得到这个html字符串。

代码语言:javascript
运行
复制
"\u003Chtml>\u003Chead>\n    \u003Cmeta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \u003Clink rel=\"shortcut icon\" href=\"https://www.xyx.com/favicon.ico\" type=\"image/x-icon\">\n    \u003Clink rel=\"icon\" href=\"https://www.xyx.com/favicon.ico\" type=\"image/x-icon\">\n    \n    \u003Ctitle>Page Not Found! : BJSBuzz\u003C/title>\n\n    \u003C!-- \n\tOpen Source Social Network (Ossn)/script>\u003C/body>\u003C/html>"
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-11 03:00:39

您应该使用JsonReader来解析值:

代码语言:javascript
运行
复制
webView.evaluateJavascript("(function() {return document.getElementsByTagName('html')[0].outerHTML;})();", new ValueCallback<String>() {
    @Override
    public void onReceiveValue(final String value) {
        JsonReader reader = new JsonReader(new StringReader(value));
        reader.setLenient(true);
        try {
            if(reader.peek() == JsonToken.STRING) {
                String domStr = reader.nextString();
                if(domStr != null) {
                    handleResponseSuccessByBody(domStr);
                }
            }
        } catch (IOException e) {
            // handle exception
        } finally {
            IoUtil.close(reader);
        }
}

});

票数 7
EN

Stack Overflow用户

发布于 2019-03-31 05:39:13

尝尝这个

代码语言:javascript
运行
复制
v=StringEscapeUtils.unescapeJavaScript(v.substring(1,v.length()-1));

unescapeJavaScript来自apache commons

这么多用于android webview的字符串处理,为什么.

前面的答案中提供的removeUTFCharacters方法是不干净的,enough.There仍然像\"一样。

票数 5
EN

Stack Overflow用户

发布于 2017-09-26 08:31:18

要删除UTFCharacthers,请使用以下函数:

代码语言:javascript
运行
复制
 public static StringBuffer removeUTFCharacters(String data) {
        Pattern p = Pattern.compile("\\\\u(\\p{XDigit}{4})");
        Matcher m = p.matcher(data);
        StringBuffer buf = new StringBuffer(data.length());
        while (m.find()) {
            String ch = String.valueOf((char) Integer.parseInt(m.group(1), 16));
            m.appendReplacement(buf, Matcher.quoteReplacement(ch));
        }
        m.appendTail(buf);
        return buf;
    }

并在onReceiveValue(String )中调用它,如下所示:

代码语言:javascript
运行
复制
@Override
public void onReceiveValue(String html) {
String result = removeUTFCharacters(html).toString();
}

您将获得一个带有干净html的字符串。

再见,亚历克斯

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45187561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档