2010-02-20 20 views
13

Sen hem mobil Safari ve Kakao en WebView'da Javascript devre dışı bırakabilirsiniz ama UIWebView içinde bunu yaparken hiçbir anlamı görebilirsiniz.UIWebView: Javascript'i Devre Dışı Bırakır mısınız?

Doğru muyum?

Ben JavaScript kullanarak bu soruya regarding obtaining the title of page displayed in an UIWebView ilgili olarak sorun. Javascript devre dışı bırakıldığında başarısız olacağından endişeleniyordum ancak API, Javascript'in devre dışı bırakılmasına izin vermiyor gibi görünüyor. JavaScript UIWebView devreden edilemiyorsa

, bu benim önceki soru tartışmalı hale getirir.

+0

iOS 8 ve üstü için (Silme başına yorum): "UIWebView yerine yeni WKWebView kullanıyorsanız bunu yapmanın bir yolu var. Burada yanıtlandı. Http://stackoverflow.com/a/34404676/1239426 " – BadPirate

cevap

9

Javascript devre dışı bırakmak için hiçbir kamu API yoktur. Yani, devre dışı bırakılmayacağını varsaymak oldukça güvenli.

12

Bir yol var! Kısmen iOS 5.1 ve yukarı desteklenmektedir Content Security Policy ve özel bir başlık kullanarak:

X-WebKit-CSP: script-src none; 

Sen tamamen sayfasında javascript izin vermeyecek şekilde UIWebKit söyleyebilir. (veya yalnızca belirli bir etki alanından gelen betiklere izin vermek için, spec .

Seçtiğiniz bir sunucudan bunu yapmak için, sayfanın yanıt üstbilgilerini X-WebKit-CSP'yi içerecek şekilde değiştirmeniz gerekecektir. başlık ... Yerel (düz metin veya cihazdaki HTML verileri) sayfalardan yapmak için, sayfanızı yüklemek için özel bir NSURLProtocol tanımlamanız ve kaydetmeniz ve üstbilgiyi hazırlanmış NSHTTPURLResponse:

NSDictionary *headers = [NSDictionary dictionaryWithObjectsAndKeys: 
         @"script-src none",@"X-WebKit-CSP", 
         @"text/html",@"Content-type", 
         encoding,@"Content-encoding", 
         nil]; 
NSHTTPURLResponse *urlResponse = [[NSHTTPURLResponse alloc] initWithURL:self.request.URL 
                 statusCode:200 
                 HTTPVersion:@"1.1" 
                 headerFields:headers]; 
[self.client URLProtocol:self didReceiveResponse:urlResponse cacheStoragePolicy:NSURLCacheStorageAllowedInMemoryOnly]; 
+0

Şunun için harika çalışıyor ben teşekkür ederim – Ponf

+0

Ne yazık ki bu iframe'lerle çalışmıyor.