2011-01-24 15 views
13

Özel HTML'yi UIWebView'a goBack yöntemini kesmeden yükleme konusunda sorun yaşıyorum. Ben benim UIWebView URL isteklerine müdahale ediyorumBir UIWebView'da NSURLRequest'leri geri düğmesini kesmeden engelleyebilir misiniz?

Ne İşleri

yüzden özel HTML yükleyebilirsiniz. Tüm HTML üzerinde kontrolüm var, bu yüzden özel uygulama isteklerim webView:shouldStartLoadWithRequest:navigationType: içinde ayrıştırabileceğim özel bir şema kullanıyor (örn. myapp://arg1/?arg2=val). Hangi HTML'yi yüklemek istediğime karar veriyorum ve loadHTMLString:baseURL numaralı telefonu arayarak orijinal isteği iptal etmek için NO'u iade ediyorum. Büyük

yukarıdaki eserlerini Çalışmıyor Ne

. Sorun, UIWebView'sgoBack yöntemini kullanmak ve loadRequest: tarih yığını ekleyen tek UIWebView yöntemini kullanmak istediğim olmasıdır.

Birkaç fikrim var, ancak hangisinin uygun olduğundan ve nasıl gidileceğinden emin değilim. Asıl önemli olan, YES'u webView:shouldStartLoadWithRequest:navigationType numaralı telefondan döndürmem gerekiyor ve UIWebView'un loadRequest yöntemini kullanmam gerekiyor.

Fikir 1: NSURLRequest/Response değiştirin: Ben NSURLRequest alt sınıf Can böylece aslında bir HTTP isteği yapmaz (UIWebView istekte bulunduğunda) ve içinde benim HTML ile bir NSURLResponse döndürür? Ya da NSURLResponse'ye bir kategori yöntemini/alt sınıfı/kategori yöntemini ekleyebilir miyim? Bunun gerçek bir istek olduğu fikrini beğendim, ancak özel API'lerden ve App Store'dan reddedilmekten endişe ediyorum.

Fikir 2: Kulp özel bir URL protokolünü Kayıt özel bir URL Protokolü yani benim app kendisine yanıt verir ve bunu meşru NSURLResponse dönmek olabilir

Fikir 3 (benim özel HTML ile dolu.) : Önbelleği al Bu önbellek ilkesi NSURLRequestReturnCacheDataDontLoad ile isteği oluşturun ve sonra bir şekilde HTML'm webView ve önbellek arasında olsun? Ya da belki yanlış yolda olduğumu mu duyuyorum?

+1

Eğer iyi bir çözüm buluyor mu? Öyleyse, neydi? –

+0

Yeni cevabımı görün. – zekel

cevap

1

Yukarıdaki yaklaşımlardan herhangi birine karşı öneriyorum.

# 3 çalışmam var, ancak çok kırılgan ve hata ayıklaması zordu. (Örneğin, Apple, NSURLRequests'u yok eder ve yeniden oluşturur, bu nedenle NSURLRequest alt sınıfını alt edemez ve sonraki yanıtta gelmeyi bekleyemezsiniz.)

Bu, kendi geçmişime ve not defterine daha kolay girmeyi başardı. hangi sayfa yüklenir ve kaydırılır (dikey ekran ofseti).

+0

Yanıtladığınız için teşekkür ederiz. Ortwin tarafından önerilen Love with Cocoa'dan yerel önbellek önerisini denemeye karar verdim. Şimdiye kadar ihtiyacım olan şeyi yapıyor gibi görünüyor ve oldukça sağlam görünüyor. –

7

Ben sadece test başka gerçekten akıllı bir yaklaşım vardır: Yerine NSURLCache müdahele veya tüm gezinme geçmişini kodunu yeniden yazmak, sadece bir HTTP isteği yapıldığında standart NSURLConnection tarafından kullanılan özel bir NSURLProtocol oluşturun.Orada, veriyi yüklemek için kendi NSURLRequest'u yaratırsınız ve MIME türünü inceleyebilir, isteğin içeriğini değiştirebilir veya verilerinizi diske önbelleğe alabilirsiniz.

http://robnapier.net/blog/offline-uiwebview-nsurlprotocol-588

Onun kod GitHub üzerinde de şimdi: Bu fikir Rob Napier nezaket geliyor

https://github.com/rnapier/RNCachingURLProtocol

+0

Bu bağlantıları gönderdiğiniz için teşekkür ederiz. Kesinlikle ilgimi çeken bir şey. – zekel

İlgili konular