Sin*_*ara 1 javascript android android-layout android-webview
我想在android' WebView'中删除网站的标题。使用我拥有的代码,它可以工作。但是问题是WebView页面完全加载后,' '正在删除标头。我要在加载时将其删除。
那就是代码片段:
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url)
{
webView.loadUrl("javascript:(function() { " +
"var head = document.getElementsByTagName('header')[0];"
+ "head.parentNode.removeChild(head);" +
"})()");
webView.loadUrl("javascript:(function() { " +
"var head = document.getElementsByTagName('footer')[0];"
+ "head.parentNode.removeChild(head);" +
"})()");
}
});
Run Code Online (Sandbox Code Playgroud)
ANDROID WebView-从Android网页中删除标题或任何标签
让我们了解这怎么可能,就我而言,我在 webview 中加载了 url,如下图所示,
现在从上面的角度来看,如果我们要删除网页的标题和菜单部分。我们需要使用JSOUP库,借助它您可以删除网页中不必要的部分。
脚步
在您的应用程序级别构建 gradle 中添加 jsoup lib
编译'org.jsoup:jsoup:1.10.3'
现在在活动中,我们将使用异步任务,因为我们解析/删除一些导致无法直接在 UI 线程上完成的网络操作的 html 标签。Async Task 允许您在 UI 线程上执行后台操作并发布结果。它有三种常用的方法。
onPreExecute():-用于显示进度条
doInBackground():-此步骤用于执行可能需要很长时间的后台计算。您无法在此方法中更新任何 UI。
onPostExecute():-在后台任务完成后调用它,它将更新用户界面。
我在 xml 中定义了 WebView,如下所示,
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/webview"/>
Run Code Online (Sandbox Code Playgroud)
在 MainActivity.java 中,我编写了 JSOUP 代码来删除网页中不必要的部分
public class MainActivity extends AppCompatActivity {
WebView webview;
String url="http://pixelay.com/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webview= (WebView) findViewById(R.id.webview);
new MyAsynTask().execute();
}
private class MyAsynTask extends AsyncTask<Void, Void, Document> {
@Override
protected Document doInBackground(Void... voids) {
Document document = null;
try {
document= Jsoup.connect(url).get();
document.getElementsByClass("main-navigation").remove();
document.getElementsByClass("custom-header-image").remove();
} catch (IOException e) {
e.printStackTrace();
}
return document;
}
@Override
protected void onPostExecute(Document document) {
super.onPostExecute(document);
webview.loadDataWithBaseURL(url,document.toString(),"text/html","utf-8","");
webview.getSettings().setCacheMode( WebSettings.LOAD_CACHE_ELSE_NETWORK );
webview.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, request);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
}
现在,是时候看看结果了
小智 5
最简单的方法是在onLoadResource()方法中注入Javascript 。将其放入try-catch块中,因为WebView在加载之前将不知道该元素:
webView.setWebChromeClient(new WebChromeClient() {
...
@Override
public void onLoadResource(WebView view, String url) {
try {
webView.loadUrl("javascript:(window.onload = function() { " +
"(elem1 = document.getElementById('id1')); elem.parentNode.removeChild(elem1); " +
"(elem2 = document.getElementById('id2')); elem2.parentNode.removeChild(elem2); " +
"})()");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6139 次 |
| 最近记录: |