如何在Android上从Javascript返回一个字符串?

Mik*_*Ups 6 html javascript string android escaping

我正试图从Android应用程序中的WebView中提取一些网页源代码.我用这个来管理:http://lexandera.com/2009/01/extracting-html-from-a-webview/

加上这个使它在KitKat之后起作用:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        webView.evaluateJavascript(
                "(function() { return ('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>'); })();",
                new ValueCallback<String>() {
                    @Override
                    public void onReceiveValue(String html) {
                        outputViewer.setText(html);
                    }
                });
    }else{
        webView.loadUrl("javascript:window.HTMLOUT.showHTML" +
                "('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
    }
Run Code Online (Sandbox Code Playgroud)

现在,问题是非kitkat版本正好返回我想要的内容.然而,KitKat版本返回代码的转义版本,如下所示:

"\u003Chtml>\u003Chead>\n\t\u003Cmeta charset=\"UTF-8\">\n\t\u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n\t\u003Clink rel=\"profile\" href=\"http://gmpg.org/xfn/11\">\n\t\u003Clink rel=\"pingback\" 
Run Code Online (Sandbox Code Playgroud)

是否有直接的方法来在Android上取消该字符串?

麦克风

car*_*izo 4

我遇到了同样的问题,看起来它是 java 转义的,所以因为我已经在使用 apache commons lang 这对我有用:

str = StringEscapeUtils.unescapeJava(str);
Run Code Online (Sandbox Code Playgroud)

"\u003Chtml lang=\"en\">\u003Chead> \u003Cmeta content=\"width=device-width,minimum-scale=1.0\"...
Run Code Online (Sandbox Code Playgroud)

"<html lang="en"><head> <meta content="width=device-width,minimum-scale=1.0"...
Run Code Online (Sandbox Code Playgroud)

我从以下位置获取了代码:

将转义的 Unicode 字符转换回实际字符