提问人:James 提问时间:7/21/2022 更新时间:7/21/2022 访问量:186
CefSharp (WPF) 中的指针锁定问题
Pointer Lock issue in CefSharp (WPF)
问:
我最近开始使用 CefSharp 框架开发 WPF 浏览器应用程序,并且遇到了指针锁定 API 的一些问题。
尝试锁定指针时,我在 Visual Studio 控制台中收到以下错误。
Uncaught (in promise) WrongDocumentError: The root document of this element is not valid for pointer lock.
但是,我在 CefSharp 框架的 Bitbucket 上遇到了一些进一步的信息,指出指针锁定尚未实现,这是在 2020 年,我开始怀疑我的 Javascript 实现是否错误,或者指针锁定 API 是否仍然不受支持。
我知道大多数浏览器都支持此功能,并且大多数浏览器都在 Chromium 框架上运行,而 CefSharp 是减去 UI 和其他零碎内容的端口。
有没有办法将其实现到我自己的项目源代码中,甚至使用指针锁定功能从源代码编译 CefSharp,或者我是否需要使用当前支持此功能的另一个框架?
Java脚本
const canvas = document.getElementById("my-canvas");
canvas.onclick = () => {
canvas.requestPointerLock();
};
答:
1赞
amaitland
7/21/2022
#1
CefSharp 只是众多 Chromium 嵌入式框架 (CEF) 包装器之一。仍在等待上游支持,以便在 CEF 中添加指针锁定。必须先在 CEF 中添加受支持,然后才能将其添加到 CefSharp。
有一个开放的公关 https://bitbucket.org/chromiumembedded/cef/pull-requests/338 尽管它已经很长时间不活跃了。
评论
0赞
amaitland
7/21/2022
您可以注入 developer.mozilla.org/en-US/docs/Glossary/Polyfill 以实现所需的行为。使用您最喜欢的搜索引擎指针锁定 polyfill,看看是否有任何可以用作参考的。CefSharp.PostMessage 可用于与 .Net 应用程序通信,github.com/cefsharp/CefSharp/issues/2775#issuecomment-498454221 另请参阅 learn.microsoft.com/en-us/dotnet/api/...
0赞
James
7/27/2022
感谢您的回复@amaitland并提供了上述解决方法。我已经在 CEF 源代码中实现了指针锁定。到目前为止,我已经构建了它并使用cefclient.exe对其进行了测试,到目前为止,一切似乎都运行良好。由于指针锁已在 CEF 源代码中实现,这是否也需要在 CefSharp 框架中实现,或者只是复制 libcef.dll 和其他依赖项的情况?我已将GN_DEFINES设置如下。is_component_build=假 is_official_build=真
0赞
James
7/28/2022
所以我现在已经从源代码编译并将 libcef.dll 添加到 C# 项目根目录,现在我收到以下异常。Exception Info: System.InvalidOperationException at CefSharp.Wpf.ChromiumWebBrowser.NoInliningConstructor() at CefSharp.Wpf.ChromiumWebBrowser..ctor() at UNS.MainWindow.InitializeChromium() at UNS.MainWindow..ctor()
0赞
amaitland
7/31/2022
若要打包 CEF 版本以用于 CefSharp,请使用 github.com/cefsharp/cef-binary 存储库中的 PowerShell 脚本。查看源代码以查看支持的参数。生成 Nuget 包后,可以从源代码生成自己的 CefSharp 版本。
0赞
James
8/3/2022
太好了,谢谢你,我很感激你的帮助。我没有使用新的二进制文件构建 CefSharp 或 nuget 包。
评论