【问题标题】:TypeError: Attempting to change value of a readonly property. definePropertyTypeError:试图更改只读属性的值。定义属性
【发布时间】:2016-09-30 07:31:29
【问题描述】:

我正在尝试 window.parent.document.dispatchEvent(keyboardEvent)

我这样做是为了捕捉 keyboardevent 的 键码值,并将根据按下的键执行一些操作。即使我在浏览器中运行,如果没有此键码,也会显示为 0。

我的代码类似于

window.setTimeout(function () {
                    var keyboardEvent = document.createEvent("KeyboardEvent");
                    var initMethod = typeof keyboardEvent.initKeyboardEvent !== 'undefined' ? "initKeyboardEvent" : "initKeyEvent";
                    键盘事件[初始化方法](
                                   "keydown", // 事件类型:keydown, keyup, keypress
                                    true, // 气泡
                                    true, // 可取消
                                    window, // viewArg: 应该是 window
                                    false, // ctrlKeyArg
                                    false, // altKeyArg
                                    false, // shiftKeyArg
                                    false, // metaKeyArg
                                    666, // keyCodeArg : unsigned long 虚拟键码,否则为 0
                                    null // charCodeArgs : unsigned long 与按下的键关联的 Unicode 字符,否则为 0
                    );
                    删除keyboardEvent.keyCode;
                    Object.defineProperty(keyboardEvent, "keyCode", {"value" : 666});
                    window.parent.document.dispatchEvent(keyboardEvent);
                }, 10000);

我给出值 666 只是为了测试。

当我在 chrome 中运行它时效果很好。

但是这行代码

Object.defineProperty(keyboardEvent, "keyCode", {"value" : 666});
thorws “TypeError:尝试更改只读属性的值。defineProperty。”当我在机顶盒中运行代码时。

这是plnkr上述代码的链接http://plnkr.co/edit/my8HkFpRqZRDrFYgIxXL?p=preview

如何在机顶盒中捕获正确的键码,以便自动执行按键事件? 是否可以在上述代码中添加/修改任何额外的行,以在机顶盒上提供正确的键码?

【问题讨论】:

    标签: javascript html webkit keyboard-events


    【解决方案1】:

    我正在回答我自己的问题,因为我发现 this link 正在解决这个问题。

    机顶盒使用webkit 运行JavaScript 代码,当keyboardEvent 被注册并且dispatchEvent 被调用时,对于任何按键,webkit 将keyCode 为任何keyboardEvent 的0。

    为了克服这个问题,不要使用keyboardEvent,而是使用通用事件以编程方式触发事件。

    代码可见this link。这里函数__triggerKeyboardEvent 使用通用事件以编程方式触发事件。

    它在机顶盒中完美运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 2016-10-08
      • 2010-11-14
      • 1970-01-01
      • 2020-12-24
      • 2021-03-24
      • 2017-12-11
      相关资源
      最近更新 更多