我正在为Mac OS编写一个应用程序 - WebKit上的浏览器用于WebGL上的某个站点。一切就绪,应用程序正确显示正常的HTML网站,但WebGL不起作用。如何在我的应用程序中启用WebGL?
答案 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,因此请查看Gecko和Chromium 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"];
请注意,由于未调用任何未记录的方法,我认为此代码符合应用商店指南,但我的应用尚未经过审核!