2015-10-31 63 views
0

我正在爲mac上的safari製作一個插件。我堅持如何在瀏覽器的窗口上創建一個可以顯示視頻的窗口。如何在具有NSWindow句柄的瀏覽器中創建窗口?

此前,我們使用的是可可事件模型,其中NPWindowNPP_SetWindow函數收到的窗口指針爲空。然後,我們切換到碳事件模型,我們通過存在於NPWindow結構窗口指針得到指向NP_CGContext,使用它我們得到了指針WindowRef並獲得一個指向NSWindow如下:

NP_CGContext* npContext = (NP_CGContext*)npWindow->window; 
WindowRef window = npContext->window; 
NSWindow* browserWindow = [[[NSWindow alloc] initWithWindowRef:window] autorelease]; 

我們的流媒體引擎接受指針到NSWindow。我們不知道如何在瀏覽器空間創建窗口。

所以關於窗口創建任何幫助,將不勝感激。

+0

我不能勸你足夠強烈,你的一系列問題的前提 - 想使一個NPAPI插件的視頻流 - 是深刻的缺陷。 Chrome已經取消了對NPAPI插件的支持,Mozilla宣佈他們將在2016年底之前取消支持,雖然蘋果尚未宣佈任何計劃,但他們通常並不知道對已棄用技術的擴展支持。您已經選擇了這個項目中最不可能繼續存在的技術。我強烈建議使用網絡視頻標準,或者製作應用程序而不是插件。 – smorgan

回答

1

我們的流媒體引擎接受指針NSWindow。我們不知道如何在瀏覽器空間創建窗口。

您不應該這樣做,如previousanswers中所述。

需要一個NSWindow指針流引擎是非常不適合於做一個NPAPI插件。你應該儘可能的尋找需要或者發佈CALayer的東西,或者失敗的,它可以將幀繪製到CGContextRef中(但是這對於進程外插件來說會更慢)。

如果你絕對必須使用一個NSWindow,那麼你就需要在你的插件進程的新一說是完全無關的瀏覽器窗口,並顯示某個地方它在屏幕上。用戶體驗相對較差,因爲它不會隨窗口一起移動,最終會落在瀏覽器窗口後面等。這顯然是瀏覽器供應商所不鼓勵的。但是如果您別無選擇,只能使用NSWindow,那麼這是現代瀏覽器的唯一選擇。

+0

他是絕對正確的(如果你出於某種原因需要第二個意見) – taxilian

相關問題