2014-04-14 14 views
6

Sorunu açıklamama izin verin, uzun zamandır beni rahatsız ediyor. Herhangi bir yardım takdir edilecektir. Lütfen yardım et.UIWebView öğesinden yerel tüm iOS işlevlerini yerel arama yapılamıyor JavaScriptCore ve JSContext

iOS'ta karma tür bir uygulama üzerinde çalışıyorum. Web sayfalarını http://myserver.com'dan yüklemek için UIWebView kullanıyorum (örneğinin gerçek URL'si değil) Bu sunucuda birden fazla web sayfası barındırdım. Ben UIWebView javascript (sunucumdan yüklenen web sayfalarının) ve yerel iOS fonksiyonları arasında iletişim kurmak için "JSContext" kullanıyorum

.

UIWebView JavaScript losing reference to iOS JSContext namespace (object) numaralı belgede verilen yordamı izledim, bağlam kayboldu, ancak bu sorunun çözümüne yönelik bir geçici çözüm ekledim. Olay UIWebView içindeki bazı çerçeve yüklemeleri için iOS içeriğim kayboluyor. Aşağıdaki adımları izledikten sonra bağlam kayboldu.

  1. ben UIWebView yılında myserver gelen Page1 yükleyin. Neredeyse her şey iyi çalışır OS yerli iOS javascript denir.
  2. ikinci page2 UIWebView aynı JavaScript bağlamda page1 etkileşimin sonucu olarak yüklenir erince kayboldu alır.

Bir daha büyülü şey daha var. dolaylı yükleme yerine (sayfa1 ->sayfa2) sayfa2 yerine doğrudan sayfa2 yüklüyorsam. Tüm iyi çalışır tüm yerel yöntemler beklendiği gibi UIwebView denir. Lütfen yardım edin. Daha fazla bilgi istiyorsanız lütfen sorunuz.

+0

http://stackoverflow.com/questions/21714365/uiwebview-javascript-losing-reference-to-ios-jscontext-namespace-object için yinelenen mi? – Andy

+0

Bu, http://stackoverflow.com/questions/21714365/uiwebview-javascript-losing-reference-to-ios-jscontext-namespace-object adresinde gerçekleşenle aynı şeydir. Yeni bir sayfa yüklendiğinde, yeni sayfa yeni bir JSContext alır. Bir çerçeve yükünden bahsetmiştin. Çerçeve JSContext ayarlanmış doğru mu? – pwc

+0

Sayfanın bir kısmı webViewDidFinishedloading çağırmadan yüklenir. JSContext'i böyle bir istek için ayarlayamıyorum. – jnix

cevap

2

Her şeyden önce, UIWebView'ın JavaScriptContext'inin bu şekilde çalınması ve kullanılması büyük olasılıkla uygulamanın reddedilmesi yoludur. Sen JavaScriptContext elde etmek için başka bir teknik deneyebilirsiniz

Ama bu sadece bir bilim projesi ise

.... Temelde

https://github.com/TomSwift/UIWebView-TS_JavaScriptContext

Ben her yeni denir olmayan bazı handeled WebKit temsilci yöntemleri yolunu kesmek için WebKit NSObject bir kategori uygulamaya nasıl çalıştığını hakkında bazı bilgilere kullanıyorum: Bu GitHub projede çözüm sunmak Bir çerçeve için JavaScriptContext oluşturulur.

+0

Cevabınız için teşekkür ederiz, ancak - ((void) webView: (UIWebView *) web Görünümü didCreateJavaScriptContext: (JSContext *) ctx { ctx [@ "myinterface"] = self; veya ctx [@ "window.myinterface"] = kendiliğinden; } ' Ve benim html çağırma 'window.myinterface.mynativefunc (' merhaba ');' hiç çağrılmadım.Lütfen yardım edin. – jnix

+0

örnek uygulama sizin için çalışıyor mu? – TomSwift

+0

Evet. İşe yaradı. – jnix