使用Javascript

时间:2015-06-10 09:15:27

标签: javascript android multithreading webview

我想在Android应用中删除header的{​​{1}}。我发现它可以以编程方式完成:

Webview

问题是,当执行上述代码时,我会收到Document document = Jsoup.connect(mUrl).get(); document.getElementsByClass("header").remove(); WebSettings ws = mWebView.getSettings(); ws.setJavaScriptEnabled(true); mWebView.loadDataWithBaseURL(mUrl, document.toString(), "text/html", "utf-8", ""); 。我认为原因是主线程上的工作太多了。我知道有一个解决方案,虽然被认为是“快速和肮脏”:

ThreadPolicyException

推荐的解决方案是代码应该在后台线程(或ThreadPolicy tp = ThreadPolicy.LAX; StrictMode.setThreadPolicy(tp); )中进行。当我尝试这个时,我也收到一个异常,因为除AsyncTask以外的线程上的Webview上的方法调用了消息:

UIThread

这个问题的适当“干净”解决方案是什么?

1 个答案:

答案 0 :(得分:0)

尝试在runOniThread内插入您的代码:

getActivity().runOnUiThread( new Runnable() {
    public void run() {
       ... your code
    }
});

在我的情况下,这在背景线程中运行良好(从Fragment运行)。

添加:

也许最好的方法是javascript-injection:

public class MyWebViewClient extends WebViewClient {

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

        // ... 
        webview.loadUrl( "javascript: { document.getElementByClass('header').remove(); }");
        // ...
    }
}


  webview.setWebViewClient( new MyWebViewClient());