UWP - Xbox One - JavaScript - 禁用 gamepadB 默认后退导航行为

Posted

技术标签:

【中文标题】UWP - Xbox One - JavaScript - 禁用 gamepadB 默认后退导航行为【英文标题】:UWP - Xbox One - JavaScript - disable gamepadB default back navigation behaviour 【发布时间】:2020-09-12 16:19:16 【问题描述】:

我有一个在 Xbox One 上运行的纯 javascript/React 捆绑 pwa/托管网络应用程序。 该应用程序有自己的自定义导航。 我想禁用 gamepadB 默认的 history.goBack() 行为。

根据

xbox one controller prevent default back button behavior with Javascript

这样的东西应该可以工作,但它没有:

navigator.gamepadInputEmulation = "keyboard";
if (typeof Windows !== "undefined") 
  const systemNavManager = Windows.UI.Core.SystemNavigationManager.getForCurrentView();

  if (systemNavManager) 
    systemNavManager.addEventListener(
      'backrequested',
      event => 
        event.handled = true;
      ,
      false
    );
  

在捕获/冒泡阶段设置 event.handled 没有任何作用。在调用此处理程序之前, event.handled 已设置为 true。 使用:

event.preventDefault()

会将应用程序作为标准 dom 功能崩溃,例如 不支持 preventDefault、stopPropagation 和 stopImmediatePropagation。

BackRequestedEventArgs Class | Windows Dev Center

【问题讨论】:

【参考方案1】:

想通了,只需在 keyCode 为 gamepadB 的 keydown 事件上添加 e.preventDefault() 即可停止默认的系统后退导航

navigator.gamepadInputEmulation = "keyboard";

document.addEventListener('keydown', e => 
            if (e.keyCode === 196 // 196 is the keycode for B button on gamepad) 

                e.preventDefault();
                this.handleBack(e);
            
        );

【讨论】:

以上是关于UWP - Xbox One - JavaScript - 禁用 gamepadB 默认后退导航行为的主要内容,如果未能解决你的问题,请参考以下文章

UWP - Xbox One - JavaScript - 禁用 gamepadB 默认后退导航行为

如何在 Windows 10 和 XBOX One UWP 应用之间使用漫游设置

如何启用 Xbox One 开发者模式激活?

在开发模式下无法在 Xbox One 上登录我的应用沙盒

在 Xbox 上的 UWP 应用中模拟游戏手柄输入

Xbox UWP 内存使用限制