在WebKit上的Mac OS应用程序中启用WebGL

时间:2012-12-01 11:47:00

标签: objective-c macos webkit webgl

我正在为Mac OS编写一个应用程序 - WebKit上的浏览器用于WebGL上的某个站点。一切就绪,应用程序正确显示正常的HTML网站,但WebGL不起作用。如何在我的应用程序中启用WebGL?

3 个答案:

答案 0 :(得分:7)

一旦有了WebView,就会有一个未记录的方法,它可以启用WebGL:

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

在此示例中,我使用respondsToSelector:对其进行了保护,以确保在以后的版本删除此特定选项时代码不会中止。

请注意,我了解如果提交到Apple的Mac App Store,包含使用未记录的界面的代码的应用程序可能会被拒绝。


另一个选择是使用一个正式支持WebGL的不同嵌入式渲染器(在Safari中演示的Apple的WebKit仅将其作为开发人员选项,可能是为了实验)。由于Firefox和Chrome都支持WebGL,因此请查看GeckoChromium Embedded Framework。 (注意:我无法确认嵌入式Gecko是否支持WebGL。)

答案 1 :(得分:2)

在小牛队,这是正确的代码。

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

您需要调用performSelector,否则会出现编译错误。

答案 2 :(得分:0)

我想出了如何在不使用未记录的方法的情况下执行此操作。您需要为您的应用设置WebKitWebGLEnabled的用户首选项@YES。要在第一次运行应用程序时应用该设置,需要在WebView初始化之前提前设置。在我的例子中,WebView实例是从主nib文件加载的,所以这是非常早的。我将此代码添加到Supporting Files/main.m

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

请注意,由于未调用任何未记录的方法,我认为此代码符合应用商店指南,但我的应用尚未经过审核!