繁体   English   中英

如何通过UWP Webview组件拦截触摸事件?

[英]How to intercept touch events over the UWP Webview component?

我正在创建一个UWP分屏应用程序。 我希望能够拖放webviews来改变他们的位置。

我无法订阅发生在webview表面上的触摸事件,以便开始处理拖动手势。 我的所有触摸都被webview消耗/捕获。

我试过了

  • 在WebView上侦听PointerMoved事件 - 不会生成任何事件
  • 在WebView的父容器(Grid)上侦听PointerMoved事件 - 不会为webview表面生成任何事件
  • 在CoreWindow上侦听PointerMoved(CoreWindow.GetForCurrentThread()) - 不会为webview表面生成任何事件
  • 将JavaScript代码注入webview以收集触摸事件 - 这有效,但我无法将事件传递回C#代码,因为window.external.notify要求域被列入白名单(不支持通配符),I想让它适用于所有网页。

如何拦截通过UWP webview组件发生的触摸事件?

通常,我们不能通过WebView组件拦截触摸事件,这是设计的。 请参阅Web视图中的 输入事件和选项卡顺序

WebView类页面上的Events表所示, Web视图不支持从UIElement继承的大多数用户输入事件 ,例如KeyDownKeyUpPointerPressed 相反,您可以将InvokeScriptAsync与JavaScript eval函数一起使用以使用HTML事件处理程序,并使用HTML事件处理程序中的window.external.notify来使用WebView.ScriptNotify通知应用程序。

通常,此处的解决方法是使用一些JavaScript库来识别/收集用户输入并使用InvokeScriptAsync方法和ScriptNotify事件与JavaScript交互。 但是,正如您所知,要在调用window.external.notify时启用外部网页来触发ScriptNotify事件,您必须在应用清单的ApplicationContentUriRules部分中包含该页面的URI。 并且不允许使用域通配符(例如,“ https://.com ”和“https://。”)。 所以这不是你的选择。

对于您的方案,我建议您为网络视图添加标题或其他边框,然后拖动标题/边框以更改其位置,就像在Edge或Chrome中一样。 在这些浏览器中,在内容表面上拖放也不会改变浏览器的位置。 要改变它的位置,我们需要拖动其标题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM