【问题标题】:get absolute url on handle ressource request on blackberry在黑莓上获取处理资源请求的绝对网址
【发布时间】:2013-01-18 10:25:20
【问题描述】:

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

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

但是,我创建了request.getURL();,它返回的是相对 URL,而不是绝对 URL。

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

【问题讨论】:

  • 我用这段代码进行了测试,确实从request.getURL()获得了绝对网址。如果我下面的建议没有帮助,您能告诉我们您正在运行哪个设备和操作系统版本吗?谢谢。

标签: blackberry java-me absolute-path browserfield


【解决方案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。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多