gpt4 book ai didi

android - 改变 WebView 中显示的数据

转载 作者:行者123 更新时间:2023-11-30 04:23:05 25 4
gpt4 key购买 nike

对于我的一个项目,我试图在 web View 中显示我从 Internet 获取的页面,但在我这样做之前对其进行了更改。我正在对从该 WebView 中点击的所有网址执行相同的操作。

为了实现这一点,我首先创建了一个扩展 WebView 的类,并添加了一个方法 loadAlteredUrl(String url)

    public void loadAlteredUrl(String url) {
String page = getURLContent(url);
String filtered;
// Code for altering the webpage


super.loadData(filtered, "text/html", "UTF-8");
//super.loadUrl("data:text/html;UTF-8," + filtered);
}


private String getURLContent(String url)
{
try{
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet(url);
HttpResponse response = httpClient.execute(httpGet, localContext);
String result = "";

BufferedReader reader = new BufferedReader(
new InputStreamReader(
response.getEntity().getContent()
)
);

String line = null;
while ((line = reader.readLine()) != null){
result += line + "\n";
}
return result;
} catch (IOException ex) {
return "IOEXCEPTION";
}

这段代码已经过测试,效果很好。但是现在我只能改变我加载的第一页,这不是我想要的。所以我扩展了 WebViewClient 类并重载了 shouldOverloadUrl 函数:

public boolean shouldOverrideUrlLoading(WebView view, String url) {
EnhancedWebview myview = (EnhancedWebview) view;
if(!url.contains("http://")){
if(url.substring(0, 1).equals("/"))
url = url.substring(1);
myview.loadAlteredUrl(MainWindow.baseUrl + url);
return true;
}
return false;
}

然而,奇怪的是,这段代码只有一半的时间有效。当我调试这段代码时,它总是经过相同的步骤,但出于某种奇怪的原因,它只会在我实际双击或更多次时打开 url。我感觉双击(甚至在必要时点击垃圾邮件)会“破坏”某些内部工作,从而使其正常工作,因为当我按应有的方式使用它时,它会经历所有必要的步骤,但不会t 加载页面(即使页面是使用我的自定义方法等获取的)。

有人知道我在这里缺少什么吗?

最佳答案

问题是“不完整”链接没有调用 shouldOverrrideUrlLoading()。这样做是出于安全原因。通常,您可以通过强制链接“完成”来解决此问题:

// browser.loadData(page, "text/html", "UTF-8");
browser.loadDataWithBaseURL("base_url", page, "text/html", "UTF-8", null);

loadDataWithBaseURL 将基本 url 添加到所有不完整的链接。

关于android - 改变 WebView 中显示的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8978689/

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