6

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

4

3 回答 3

9

一旦你有了一个 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。)

于 2012-12-01T16:26:49.093 回答
2

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

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

你需要调用 performSelector 否则你会得到一个编译错误。

于 2014-01-09T17:46:49.153 回答
0

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

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

请注意,由于没有调用未记录的方法,我假设此代码在应用商店指南内,但我的应用尚未经过审核!

于 2015-07-22T04:37:32.173 回答