2012-12-01 30 views

回答

6

一旦你有一個WebView中,有一個無證方法它可以使的WebGL:

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

在這個例子中我與respondsToSelector:保護,它保證了代碼,如果以後的版本中刪除此不會中止具體選項。

請注意,如果提交給Apple的Mac App Store,我知道包含使用未記錄界面的代碼的應用程序可能會被拒絕。


另一種選擇是使用不同的嵌入式渲染器正式支持WebGL的(其中爲證明在Safari蘋果的WebKit只有它作爲一個開發人員選項,大概意在實驗)。由於Firefox和Chrome都支持WebGL,請查看GeckoChromium Embedded Framework。 (注:我無法確認嵌入的Gecko是否支持WebGL。)

+0

它的工作原理!感謝凱文:)謝謝注意,這是一個未記錄的方法,可以創建一些與Mac App Store提交問題。最好。 – Beny

+0

有沒有什麼方法可以使用它來在快速外觀擴展中啓用WebGL?具體在'GeneratePreviewForURL'函數中? http://stackoverflow.com/q/18443710/148668 –

2

在小牛隊中,這是正確的代碼。

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

你需要調用performSelector否則你會得到一個編譯錯誤。

0

我想出瞭如何在不使用未記錄的方法的情況下做到這一點。您需要將您的應用的用戶首選項WebKitWebGLEnabled設置爲@YES。要在第一次運行應用程序時應用該設置,需要在WebView初始化之前儘早進行設置。就我而言,WebView實例是從主要的nib文件加載的,所以這確實很早。我將此代碼添加到Supporting Files/main.m

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

請注意,由於沒有無證方法被調用時,我想這個代碼是App Store的指導方針,但我的應用程序尚未審查!