面对同样的问题,我们最终发现,Adobe 会将所有按键操作交给主机应用程序,除非它可以确定输入或下拉元素具有焦点。我希望这是通过对document.activeElement
. 当涉及到 Shadow DOM 时,Adobe 必须做类似的事情
let target = document.activeElement;
while (target.shadowRoot && target.shadowRoot.activeElement) {
target = target.shadowRoot.activeElement;
}
为了找到底层<input>
元素。
由于这目前不起作用,我们需要使用registerKeyEventsInterest
明确地让我们的代码处理所有按键。
var csInterface = new CSInterface();
var keyEvents = [];
// All the keyCodes you need, with the modifiers used
keyEvents.push({ keyCode: 0 });
keyEvents.push({ keyCode: 0, metaKey: true });
// ...
csInterface.registerKeyEventsInterest(JSON.stringify(keyEvents));
我们实际上继续循环 0..255 并注册所有修饰符。除了基于键盘的复制粘贴之外,我们现在拥有我们的 web 组件的全部功能(主要基于 PolymerElement/LitElement)。
https://github.com/Adobe-CEP/CEP-Resources/blob/master/CEP_8.x/Documentation/CEP%208.0%20HTML%20Extension%20Cookbook.md#register-an-interest-in-specific-key-事件