1

私はこのメソッドを使用して、Webページに含まれるリソースのURLを取得します

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

コードを実行すると、Web ページに相対リンクが含まれている場合でも、絶対 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 が相対 URL であるブランチのコードを簡単にテストできませんでした。"/"そのため、どこかにドロップしているか、 file:///URL を適切に処理していない可能性があります。

ただし、これは問題を回避するための出発点です。

于 2013-01-18T23:12:23.320 に答える