2012-12-01 10 views
5

Piszę aplikację na Mac OS - przeglądarkę w WebKit, która ma być używana na niektórych stronach w WebGL. Wszystko gotowe, aplikacja poprawnie wyświetla normalne strony HTML, ale WebGL nie działa. Jak włączyć WebGL w mojej aplikacji?Włącza WebGL w aplikacji Mac OS na WebKit

Odpowiedz

6

Gdy masz WebView istnieje nieudokumentowana metoda który może włączyć WebGL:

WebPreferences *p = [webView preferences]; 
if ([p respondsToSelector:@selector(setWebGLEnabled:)]) { 
    [p setWebGLEnabled:YES]; 
} 

W tym przykładzie mam chronionego go respondsToSelector: zapewnienie kod nie zostanie przerwana, jeśli nowsze wersje usunąć ten konkretna opcja.

Należy pamiętać, że rozumiem, że aplikacja zawierająca kod wykorzystujący nieudokumentowane interfejsy może zostać odrzucona, jeśli zostanie przesłana do sklepu Apple App Store firmy Apple.


Inną opcją jest użycie innego osadzonego renderujący, która oficjalnie obsługuje WebGL (gdzie Apple WebKit, jak wykazano w Safari ma go tylko jako opcja dewelopera, przypuszczalnie ma być doświadczalnie). Ponieważ zarówno Firefox, jak i Chrome obsługują WebGL, zobacz: Gecko i Chromium Embedded Framework. (Uwaga: Nie udało mi się potwierdzić, czy wbudowany Gecko obsługuje WebGL.)

+0

To działa! Podziękowania dla Kevina :) A także podwójne podziękowania za odnotowanie, że jest to nieudokumentowana metoda, która może powodować problemy z przesyłaniem do Mac App Store. Najlepiej. – Beny

+0

Czy jest jakiś sposób wykorzystania tego do włączenia WebGL w rozszerzeniu szybkiego rozszerzenia? W szczególności w funkcji 'GeneratePreviewForURL'? http://stackoverflow.com/q/18443710/148668 –

2

W Mavericks jest to poprawny kod.

Musisz wywołać performSelector, w przeciwnym razie pojawi się błąd kompilacji.

0

Wymyśliłem, jak to zrobić bez użycia nieudokumentowanej metody. Musisz ustawić preferencję użytkownika WebKitWebGLEnabled do @YES dla swojej aplikacji. Aby ustawienie miało zastosowanie po pierwszym uruchomieniu aplikacji, należy je ustawić wcześniej, zanim zainicjowane zostanie WebView. W moim przypadku instancja WebView jest ładowana z głównego pliku nib, więc jest to bardzo wczesne. I dodaje ten kod do Supporting Files/main.m:

[[NSUserDefaults standardUserDefaults] setObject:@YES 
             forKey:@"WebKitWebGLEnabled"]; 

Należy pamiętać, ponieważ żadna metoda nazywana jest nieudokumentowane, zakładam, że ten kod jest w app store wytycznych, ale moja aplikacja nie został jeszcze oceniony!