2009-08-14 7 views
0

Also arbeite ich mit WebKit - WebView und WebFrame. Ich verwende ein benutzerdefiniertes NSURLProtocol, um den HTML-Code für jede Anfrage aus einer Datenbank abzurufen. Das Problem ergibt sich aus der Tatsache, dass die Links im HTML alle relativ sind, wenn sie wirklich absolut sein sollten. Zum Beispiel ist die SeiteKann ich erzwingen, dass alle Links in einem WebView (oder WebFrame) als absolute Pfade behandelt werden?

foo/bar.html

Mai einen Link darin haben, dass die Punkte auf

foo/baz.html

Das Problem ist, dass, da der Link relativ ist, endet die Anforderung für

ist bis
/foo/foo/baz.html

Bis jetzt habe ich versucht, dies zu umgehen, indem ich die beiden URLs vergleiche und das gemeinsame Präfix - in diesem Fall 'foo /' - abreiße und mich mit foo/baz.html belasse. Dies funktioniert jedoch nicht für alle Möglichkeiten, insbesondere wenn mehrere Verzeichnisse im Pfad vorhanden sind. Ich mache das in der Methode "didStartProvisionalLoadForFrame:" meines WebView-FrameLoadDelegate.

Leider habe ich keine Kontrolle über den HTML-Code, den ich zeige, daher ist es nicht möglich, die Links selbst zu ändern.

Antwort

0

Versuchen Sie, der Ressourcenlade-Delegat des Hauptrahmens zu sein, und implementieren Sie webView:resource:willSendRequest:redirectResponse:fromDataSource:, um die angeforderte URL zu ändern. Senden Sie relativeString an die URL der Anforderung, um die ursprüngliche relative URL abzurufen, und verwenden Sie dann -[NSURL initWithString:baseURL:], um eine neue URL mit derselben relativen Zeichenfolge für die korrekte Basis-URL zu erstellen.

+0

Aus irgendeinem Grund gibt [request relativeString] mir die gesamte URL, mit dem aktuellen Verzeichnis bereits vor - das heißt, die relativeString und absoluteString geben die gleiche Zeichenfolge zurück. –

+0

Also habe ich es geschafft. In webView: resource: willSendRequest: redirecResponse: fromDataSource: Ich erhalte die URL der Anfrage sowie die URL der aktuellen Seite. Ich kann das aktuelle Verzeichnis abrufen, indem ich die letzte Pfadkomponente entferne, und entferne sie dann vom Anfang der URL der Anfrage. Ich werde diese Antwort akzeptieren, da sie mich zumindest in die richtige Richtung weist. Vielen Dank! –

Verwandte Themen