我的意圖是爲windows用戶創建一個chrome插件。可以從Native Client/PPAPI調用windows api。如果可能如何?從Native Client/Pepper Plugin調用Windows API
回答
我在回答我的問題,因爲經過一番研究,我發現西方的答案有點不對。我嘗試在Pepper(PPAPI)插件中調用Windows API,並且它可以很好地使用命令行開關「--register-pepper-plugins」(而不是West指定的--no-sandbox)。使用這個命令行屬性似乎更安全,因爲它只是在Chrome瀏覽器中註冊一個插件,而不是刪除任何沙箱。我想在添加一個答案後找到一個實際的辣椒插件存在使用中,它使用開關(chromeos的NetFlix胡椒插件)。
有更多信息要添加。 Chrome API可提供多顯示器信息:chrome.systemInfo.display對象提供了所有必要的信息。 chrome文檔不會更新。 要注意的重要事項是,清單中將添加權限「systemInfo.display」以使用此對象。此對象的功能中報告了兩個錯誤。
1.顯示器名稱與所有顯示器「通用即插即用顯示器」相同,文檔聲稱提供用戶友好的顯示器名稱。
2.有一個事件應該在監視器的分辨率變化時被調用,但事件從未被調用。
目前該實現僅適用於Windows操作系統。正在爲其他操作系統提供支持。 文檔說該API僅適用於Chrome應用程序,但我已經測試過,並且該API也可以在Chrome擴展上使用。
不幸的是,簡短的答案是'不'。 Native Client被設計爲獨立於操作系統並且與JavaScript一樣安全。將Native Client視爲與JavaScript具有相同功能和限制的本機代碼。進行Windows API調用的Native Client模塊將會破壞這兩種設計原則:它不會在Mac上運行,這將是一個主要的安全風險(想象一下瀏覽到決定從中刪除文件的網頁你的硬盤)。
由於您提到了Chrome,因此您可能很感興趣知道,Web應用程序 - 無論他們使用的是JavaScript還是Native Client - 都可以在Chrome網上應用店中將請求additional permissions作爲打包的應用程序請求。但是,由於上面列出的原因,本機OS調用仍然不可行。
NPAPI插件沒有這些限制,但至少在Chrome中,NPAPI的未來還不確定(請參閱http://blog.chromium.org/2012/07/npapi-plug-ins-in-windows-8-metro-mode.html的最後一段)。
出於開發目的,可以使用命令行標誌--no-sandbox關閉Chrome的外部沙箱,然後運行直接OS調用的PPAPI插件。這是爲開發人員設計的,並不適合最終用戶使用。
如果您可以多說一點你想要達到的目標,可以通過Native Client/Pepper做到這一點。
謝謝你的細節,西。我正在Google Chrome上開發一個應用於多顯示器的全屏應用程序。應該有一個用戶將應用程序移動到其他監視器的選項。所以,我的谷歌插件應該能夠收集每個監視器的信息,顯示它們,並將我的應用程序移動到用戶選擇的監視器。如果在不使用Win API的情況下將多監視器的詳細信息和瀏覽器窗口移動到另一臺監視器是可能的,那就太好了。 – MGR
嗯,這是一個艱難的。在JavaScript或Pepper中無法做到您想要的,因爲目前都沒有可以可靠地檢測多個顯示器的API。您現在可以做的最好的方法是退出全屏模式,並依靠用戶在返回全屏模式之前移動窗口 - 這不是一個好的解決方案。或者有NPAPI,但這也不是一個非常有吸引力的選擇。 –
Thanx West。期待Pepper和Native Client的發展達到一定的水平,並支持沙盒中的這些東西。 – MGR
- 1. Windows和Native API中的系統調用?
- 2. 解釋Windows Native API調用參數
- 3. 從用戶模式訪問Windows Native API
- 4. 我們可以從Delphi調用Native Windows API嗎?
- 5. 在Java中使用使用「native」的Windows API調用
- 6. 有什麼辦法從用戶模式調用Windows Native API函數嗎?
- 7. 在java中調試Native API
- 8. React Native - 同步調用restful API
- 9. Windows API調用CB_SELECTSTRING
- 10. 如何從JScript或Testcomplete調用Windows API?
- 11. c#從web api調用windows服務
- 12. 如何從Windows服務調用REST API
- 13. 我們可以從基於JavaScript的Office插件調用Native API
- 14. 爲什麼Windows具有Native API?
- 15. maven-plugin-api com.thoughtworks.qdox.parser.ParseException
- 16. hadoop windows org.codehaus.mojo:exec-maven-plugin
- 17. 如何調用Windows API
- 18. 從javascript中調用pdfium(chrome native pdf viewer)
- 19. 使用VB.NET調用Windows API
- 20. 從Windows Forms應用程序調用Google Maps API V3 JavaScript API?
- 21. 從Maven-Antrun-Plugin調用<if>
- 22. maven-nar-plugin vs native-maven-plugin,哪個更好?
- 23. 我可以使用Jenkins Artifactory Plugin(DSL)來調用Artifactory REST API嗎?
- 24. 從API調用
- 25. 從C#代碼中調用C++ native native dll
- 26. 從React-Native代碼調用Android活動
- 27. 如何從PlayN調用native(Android)功能?
- 28. 從Java React Native調用JavaScript方法
- 29. Android的WebRTC Native API
- 30. Windows Mobile 6.5 Today Plugin
如果我已經正確理解了你,'--register-pepper-plugins'對於本地操作系統調用很有用。爲什麼這個標誌可以幫助Chrome操作系統本身?另外,你知道是否有一種方法可以在不使用命令行開關的情況下指定一個dll路徑(例如,在.nmf文件中)?非常感謝你的幫助! – AbdullahC
Pepper插件本質上具有使用本機API調用的權限。但要在Chrome中使用它們,我們需要註冊它們,這就是--register-pepper-plugin命令行參數的幫助所在。我還試圖找到另一種方法來獲取通過nmf指定的插件註冊名和dll名。到目前爲止,我沒有遇到過這樣的選擇。 – MGR
謝謝@MGR!順便說一句,嘗試NetFlix插件的最佳方式是什麼?我需要Windows還是Linux?通過在線評論,似乎只有Linux上的Chrome需要命令行切換。 – AbdullahC