1

我使用这种方法获取网页上包含的资源的网址

public InputConnection handleResourceRequest(BrowserFieldRequest request) throws Exception 
{
    final String url = request.getURL();
    return super.handleResourceRequest(request);
}

但是,我request.getURL();让它返回相对 url 而不是绝对 url。

如何更改它以获取绝对 URL?

4

1 回答 1

1

当我运行你的代码时,它确实返回了绝对 URL,即使我的网页包含相对链接。也就是说,如果有时它不会让我感到惊讶,它不会。我还没有完全测试过这段代码,但我认为你可以尝试这样的事情。

基本上,您检查 URL 是否是绝对 URL,如果不是,则使用父BrowserField文档 URL 组合一个绝对 URL:

  ProtocolController controller = new ProtocolController(_browserField) {

     public InputConnection handleResourceRequest(BrowserFieldRequest request) throws Exception {
        String absoluteUrl = null;
        URI uri = URI.create(request.getURL());
        if (uri.isAbsolute()) {
           absoluteUrl = request.getURL();
        } else {
           String docUrl = _browserField.getDocumentUrl();
           String url = request.getURL();
           if (url.startsWith("/")) {
              // the URL is relative to the server root
              URI docUri = URI.create(docUrl);
              absoluteUrl = docUri.getScheme() + "://" + docUri.getHost() + url;
           } else {
              // the URL is relative to the document URL
              absoluteUrl = docUrl + url;
           }
        }
        System.out.println("   requesting: " + absoluteUrl);
        return super.handleResourceRequest(request);
     }
  }

同样,对我来说,我得到的是绝对 URL,所以我不能轻易地测试 URL 是相对的分支中的代码。所以,我有可能在某个地方丢了一个"/"地方,或者没有file:///正确处理 URL。

但是,这是解决您的问题的起点。

于 2013-01-18T23:12:23.320 回答