Enable WebGL in the Mac OS application on WebKit

前端 未结 3 985
伪装坚强ぢ
伪装坚强ぢ 2021-02-06 11:00

I am writing an application for Mac OS - browser on WebKit to use for the some site on WebGL. All is ready, the application correctly displays normal HTML sites, but WebGL doesn

相关标签:
3条回答
  • 2021-02-06 11:41

    Once you have a WebView, there is an undocumented method which can enable WebGL:

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

    In this example I have protected it with respondsToSelector: to ensure the code will not abort if later versions remove this specific option.

    Note that I understand that an application containing code using undocumented interfaces may be rejected if submitted to Apple's Mac App Store.


    Another option is to use a different embedded renderer which officially supports WebGL (where Apple's WebKit as demonstrated in Safari only has it as a developer option, presumably intended to be experimental). Since both Firefox and Chrome support WebGL, have a look at Gecko and Chromium Embedded Framework. (Note: I have not been able to confirm whether whether embedded Gecko supports WebGL.)

    0 讨论(0)
  • 2021-02-06 11:51

    In Mavericks, this is the correct code.

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

    You need to call performSelector otherwise you'll get a compile error.

    0 讨论(0)
  • 2021-02-06 12:00

    I figured out how to do this without using an undocumented method. You need to set the user preference WebKitWebGLEnabled to @YES for your app. To have the setting apply the first time the app is run, it needs to be set early, before the WebView is initialized. In my case, the WebView instance is loaded from the main nib file, so that's very early indeed. I added this code to Supporting Files/main.m:

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

    Please note, since no undocumented method is called, I assume this code is within app store guidelines, but my app hasn't been reviewed yet!

    0 讨论(0)
提交回复
热议问题