我想在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
这个问题的适当“干净”解决方案是什么?
答案 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());