Ich schreibe eine Anwendung für Mac OS - Browser auf WebKit für die einige Website auf WebGL zu verwenden. Alles ist bereit, die Anwendung zeigt normale HTML-Sites korrekt an, aber WebGL funktioniert nicht. Wie kann WebGL in meiner App aktiviert werden?Aktivieren WebGL in der Mac OS-Anwendung auf WebKit
Antwort
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.)
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.
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!
- 1. Aktivieren der WebGL-Unterstützung für Android WebView
- 2. Aktivieren/Deaktivieren Fn-Tasten von der Kommandozeile auf dem Mac
- 3. kann Webgl für Chrom in virtualbox nicht aktivieren
- 4. phantomjs kompilieren mit webGL
- 5. Aktivieren Memcache auf Mac OSX mit Stock Apache und php5
- 6. Computing Halb Vektor auf WebGL
- 7. WebGL auf Cordova mit Three.js
- 8. Aktivieren der horizontalen Bildlauf in Flexbox
- 9. Multigexture GL_TEXTURE1 Problem auf WebGL
- 10. Der schnellste Weg zu Batchaufrufen in WebGL
- 11. Modernizr: Testen für WebGL vs WebGL Exentions
- 12. Volume in WebGL Rendering
- 13. Aktivieren kursiv in vim Syntax-Hervorhebung für mac Terminal
- 14. Render WebGL in Xfvb
- 15. Capybara Webkit Capybara :: Webkit :: Connection fehlgeschlagen
- 16. WebKit-Browser in Java-App auf mehreren Plattformen
- 17. WebGL Framework
- 18. So erhalten Sie Webkit für Mac OS X
- 19. Python + webkit + gtk auf Windows
- 20. Ausführen von WebGL-Shadern auf travis-ci
- 21. WebGL - wie Vektorraum auf Bildschirm unproject
- 22. Anwendungscache in WKWebView aktivieren
- 23. Webkit-Animationen Leistung auf IPad
- 24. Webgl Textur interlaced Flimmern auf dedizierten GPU
- 25. Aktivieren der Ruby PostGIS-Unterstützung auf Heroku
- 26. Webkit-Transformation bricht z-index auf Safari
- 27. Soll WebGL auf Leinwand gestreckt werden
- 28. Render Text auf Leinwand mit WebGL
- 29. Wie console.log in Webgl-Shadern?
- 30. Stencil Buffering in Elm-Webgl
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
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 –