我正在为 Mac OS 编写一个应用程序 - WebKit 上的浏览器,用于 WebGL 上的某个站点。一切就绪,应用程序正确显示正常的 HTML 站点,但 WebGL 不起作用。如何在我的应用程序中启用 WebGL?
3 回答
一旦你有了一个 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,请查看Gecko和Chromium Embedded Framework。(注:我无法确认嵌入式 Gecko 是否支持 WebGL。)
在小牛队,这是正确的代码。
WebPreferences *preferences = [_webview preferences];
if([preferences respondsToSelector:@selector(setWebGLEnabled:)]){
[preferences performSelector:@selector(setWebGLEnabled:) withObject:[NSNumber numberWithBool:YES]];
}
你需要调用 performSelector 否则你会得到一个编译错误。
我想出了如何在不使用未记录方法的情况下做到这一点。您需要为您的应用设置用户首WebKitWebGLEnabled
选项@YES
。要在应用程序第一次运行时应用设置,需要在WebView
初始化之前尽早设置。在我的例子中,WebView
实例是从主 nib 文件加载的,所以这确实很早。我将此代码添加到Supporting Files/main.m
:
[[NSUserDefaults standardUserDefaults] setObject:@YES
forKey:@"WebKitWebGLEnabled"];
请注意,由于没有调用未记录的方法,我假设此代码在应用商店指南内,但我的应用尚未经过审核!