2012-12-01 11 views

Antwort

6

Sobald Sie eine WebView haben, gibt es eine undokumentierte Methode die WebGL aktivieren:

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

In diesem Beispiel habe ich es mit respondsToSelector: geschützt haben, um den Code sicherzustellen, wird nicht abbrechen, wenn neuere Versionen diese entfernen spezifische Option.

Beachten Sie, dass eine Anwendung, die Code mit undokumentierten Schnittstellen enthält, möglicherweise abgelehnt wird, wenn sie an Apples Mac App Store gesendet wird.


Eine weitere Option ist einen anderen Embedded-Renderer zu verwenden, die WebGL offiziell unterstützt (wo Apples WebKit als nur in Safari demonstrierte es als Entwickler-Option hat, vermutlich sollte experimentell sein). Da sowohl Firefox als auch Chrome WebGL unterstützen, werfen Sie einen Blick auf Gecko und Chromium Embedded Framework. (Hinweis: Ich konnte nicht bestätigen, ob Embedded Gecko WebGL unterstützt.)

+0

Es funktioniert! Danke Kevin :) Und doppelt danke, dass es eine undokumentierte Methode ist, die Probleme mit der Einreichung des Mac App Store verursachen kann. Beste. – Beny

+0

Gibt es eine Möglichkeit, dies zu verwenden, um WebGL in einer schnellen Erweiterung zu aktivieren? Speziell in der 'GeneratePreviewForURL' Funktion? http://stackoverflow.com/q/18443710/148668 –

2

In Mavericks ist dies der korrekte Code.

WebPreferences *preferences = [_webview preferences]; 
if([preferences respondsToSelector:@selector(setWebGLEnabled:)]){ 
    [preferences performSelector:@selector(setWebGLEnabled:) withObject:[NSNumber numberWithBool:YES]]; 
} 

Sie müssen perform nennen sonst werden Sie einen Compiler-Fehler erhalten.

0

Ich habe herausgefunden, wie man das macht, ohne eine undokumentierte Methode zu verwenden. Sie müssen die Benutzereinstellung WebKitWebGLEnabled für Ihre App auf @YES festlegen. Damit die Einstellung beim ersten Start der App angewendet wird, muss sie früh festgelegt werden, bevor die WebView initialisiert wird. In meinem Fall wird die WebView Instanz aus der Haupt-Nib-Datei geladen, so dass es sehr früh ist. Ich habe diesen Code zu Supporting Files/main.m:

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

Bitte beachten Sie, da keine undokumentierten Methode aufgerufen wird, nehme ich an diesem Code in App-Store-Richtlinien ist, aber meine App wurde noch nicht bewertet!