gpt4 book ai didi

android - 来自 URL 的 CSS 在 JSoup 中不起作用

转载 作者:行者123 更新时间:2023-11-29 01:39:09 27 4
gpt4 key购买 nike

我正在使用 jsoup 下载和更改网站,然后在 WebView 中显示它。我的问题是 css 没有正确加载。我试过像 this issue 中那样删除文档类型标签但没有帮助。我必须补充一点,下载的网站有良好的样式表路径。

关于我的代码:

  1. 首先是我的程序通过jsoup下载网站
  2. 然后进行一些解析和编辑代码
  3. 将 html 保存到 String 并将其发送到 WebView。字符串具有良好的 css 样式表路径,所以我不知道是什么原因导致了这个问题。

我通过在 PC 上下载相同的站点并在没有 css 样式表标记的情况下启动它,发现这是 css 问题。

这是我的 java 类,用于执行上述操作:

package com.example.sqllite;

import java.io.IOException;
import java.util.List;

import com.example.kontaktysqllite.R;

import android.os.AsyncTask;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.DocumentType;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;

/**
* Okno danego szablonu (webview)
*
* @author Alan
*
*/
public class TemplateActivity extends Activity {

private WebView mWebView;
private String url;
private StringBuffer website;
private String websites;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.template_activity);
// Webview
this.url = getIntent().getExtras().getString("urlString");
new ParseTask().execute(getIntent().getExtras().getString("urlString"));
}

private void addHtml(String html) {
website.append(html);
}

private void getHtml() {
String html = this.website.toString();
websites = html;
}

private class ParseTask extends AsyncTask<String, Void, Document> {
@Override
protected Document doInBackground(String... arg0) {
Document doc = null;
for (String url : arg0) {
try {
doc = Jsoup.connect(url).get();
} catch (IOException e) {
e.printStackTrace();
}
}
return doc;
}

@Override
protected void onPostExecute(Document doc) {

List<Node>nods = doc.childNodes();
nods.get(0).remove();



Elements tekst = doc.getElementsByClass("ctr-textTitle");
for (Element div : tekst) {
for (Element child : div.children()) {
for (Element child2 : child.children()) {
for (Element child3 : child2.children()) {
for (Element child4 : child3.children()) {
child4.text("heheh");
}
}
}
}
}

Elements imports = doc.select("link[href]");
for (Element link : imports) {
//if (link.attr("rel") == "stylesheet") {
String path = link.attr("abs:href");
String newpath = url + path;
Log.i("oldpath", path);
Log.i("path", newpath);
//link.attr("abs:href", newpath);
//}
}
String html = doc.html();
websites = html;

mWebView = (WebView) findViewById(R.id.webView1);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setLoadWithOverviewMode(true);
mWebView.getSettings().setUseWideViewPort(true);
mWebView.getSettings().setBuiltInZoomControls(true);
mWebView.getSettings().setSupportZoom(true);
mWebView.setWebViewClient(new WebViewClient());
// getHtml();
Log.i("task", "" + websites);
mWebView.loadData(websites, "text/html", "UTF-8");
}
}
}

解决方案为了加载 CSS,我更改了 117 行:

mWebView.loadData(websites, "text/html", "UTF-8");

为此:

mWebView.loadDataWithBaseURL(url, websites, "text/html", "UTF-8", "");

而且效果很好。

最佳答案

尝试使用 loadDataFromBaseUrl() 而不是 loadData()

好吧还是用 吧 ;-).

关于android - 来自 URL 的 CSS 在 JSoup 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25888444/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com