Webview不加载javascript获取内容

Webview does not load javascript to get content

我想获取 url 正文标记中的所有文本,但它不起作用。我搜索了很多,但找不到任何东西。我还添加了android.permission.INTERNET

所以问题是什么?

这是我的代码:

public class Activity_Main  extends Activity {

@SuppressLint("JavascriptInterface")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final WebView webView = (WebView) findViewById(R.id.webView);

    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setDomStorageEnabled(true);

    final TextView contentView = (TextView) findViewById(R.id.contentView);

    class MyJavaScriptInterface
    {
        private TextView contentView;

        public MyJavaScriptInterface(TextView aContentView)
        {
            contentView = aContentView;
        }

        @SuppressWarnings("unused")

        public void processContent(String aContent)
        {
            final String content = aContent;
            contentView.setText(content);
        }
    }

    webView.getSettings().setJavaScriptEnabled(true);
    webView.addJavascriptInterface(new MyJavaScriptInterface(contentView), "INTERFACE");
    webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url)
        {
            webView.loadUrl("javascript:window.INTERFACE.processContent(document.getElementsByTagName('body')[0].innerText);");
        }
    });

    webView.loadUrl("https://whosebug.com");
  }
} 

为您的接口函数更新@JavascriptInterface 并检查

class MyJavaScriptInterface
    {
        private TextView contentView;

        public MyJavaScriptInterface(TextView aContentView)
        {
            contentView = aContentView;
        }

        @JavascriptInterface
        public void processContent(String aContent)
        {
            final String content = aContent;
            contentView.setText(content);
        }
    }

对于上面的 KITKAT

,还有另一种方法可以做到这一点
 webView.evaluateJavascript("alert('pass here some ...')", new ValueCallback<String>() {
       @Override
       public void onReceiveValue(String s) {

        }
    });

这是android

执行js的更新方案

完整代码在这里

final WebView webView = (WebView) findViewById(R.id.webView);

    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setDomStorageEnabled(true);

    final TextView contentView = (TextView) findViewById(R.id.contentView);

    class MyJavaScriptInterface
    {
        private TextView contentView;

        public MyJavaScriptInterface(TextView aContentView)
        {
            contentView = aContentView;
        }

        @JavascriptInterface
        public void processContent(String aContent)
        {
            final String content = aContent;
            contentView.setText(content);
        }
    }

    webView.getSettings().setJavaScriptEnabled(true);
    webView.addJavascriptInterface(new MyJavaScriptInterface(contentView), "INTERFACE");
    webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url)
        {
            super.onPageFinished(view,url);


            if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT) {
                webView.evaluateJavascript("document.getElementsByTagName('body')[0].innerText", new ValueCallback<String>() {
                    @Override
                    public void onReceiveValue(String s) {
                        contentView.setText(s);
                    }
                });
            }
            else {
                webView.loadUrl("javascript:window.INTERFACE.processContent(document.getElementsByTagName('body')[0].innerText)");

            }


                       }
    });

    webView.loadUrl("https://whosebug.com");

要从 Android 调用 JavaScript 函数,您不需要添加接口前缀:

webView.loadUrl("javascript:processContent(document.getElementsByTagName('body')[0].innerText);");

注意:您必须在 HTML 页面中实现调用的 javascript 函数。所以如果你在你的webview中调用第三方网站,你只能访问该页面中当前存在的功能。

例如 https://whosebug.com 没有名为 INTERFACE.processContent!

的 javascript 函数

相反,当你想从 javascript 调用 Android 方法时,你需要那个前缀:

<script>INTERFACE.myAndroidMethod()</script>

最后,如果您想处理第三方网页的 HTML 内容,您无法使用 Webview 和 JavaScript 函数(该页面中不存在)提取内容,但您需要 Android 无需 WebView 中介即可加载网页内容的代码。