UWP - Xbox One - JavaScript - 禁用 gamepadB 默认后退导航行为
UWP - Xbox One - JavaScript - disable gamepadB default back navigation behaviour
我在 Xbox One 上有一个纯粹的 JavaScript/React 捆绑 pwa/hosted 网络应用程序 运行。
该应用程序有自己的自定义导航。
我想禁用 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
);
}
}
在 capture/bubble 阶段设置 event.handled 什么都不做。 event.handled 在调用此处理程序之前已设置为 true。
使用:
event.preventDefault()
作为标准 dom 功能会使应用程序崩溃,例如
不支持 preventDefault、stopPropagation 和 stopImmediatePropagation。
明白了,只需在 keyCode 为 gamepadB 的按键事件上添加 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);
}
});
我在 Xbox One 上有一个纯粹的 JavaScript/React 捆绑 pwa/hosted 网络应用程序 运行。 该应用程序有自己的自定义导航。 我想禁用 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
);
}
}
在 capture/bubble 阶段设置 event.handled 什么都不做。 event.handled 在调用此处理程序之前已设置为 true。 使用:
event.preventDefault()
作为标准 dom 功能会使应用程序崩溃,例如 不支持 preventDefault、stopPropagation 和 stopImmediatePropagation。
明白了,只需在 keyCode 为 gamepadB 的按键事件上添加 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);
}
});