TypeError:尝试更改只读属性的值。 defineProperty

时间:2016-09-30 07:31:29

标签: javascript html webkit keyboard-events

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

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

我的代码类似于

window.setTimeout(function () {
                    var keyboardEvent = document.createEvent("KeyboardEvent");
                    var initMethod = typeof keyboardEvent.initKeyboardEvent !== 'undefined' ? "initKeyboardEvent" : "initKeyEvent";
                    keyboardEvent[initMethod](
                                   "keydown", // event type : keydown, keyup, keypress
                                    true, // bubbles
                                    true, // cancelable
                                    window, // viewArg: should be window
                                    false, // ctrlKeyArg
                                    false, // altKeyArg
                                    false, // shiftKeyArg
                                    false, // metaKeyArg
                                    666, // keyCodeArg : unsigned long the virtual key code, else 0
                                    null // charCodeArgs : unsigned long the Unicode character associated with the depressed key, else 0
                    );
                    delete keyboardEvent.keyCode;
                    Object.defineProperty(keyboardEvent, "keyCode", {"value" : 666});
                    window.parent.document.dispatchEvent(keyboardEvent);
                }, 10000);

我只给予值666以进行测试。

当我在chrome中运行它时,这可以正常工作。

但这行代码

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

这是上面代码http://plnkr.co/edit/my8HkFpRqZRDrFYgIxXL?p=preview

plnkr链接

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

1 个答案:

答案 0 :(得分:0)

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

机顶盒正在使用webkit来运行JavaScript代码,当注册keyboardEvent并且为任何按键操作调用dispatchEvent时,webkit会将keyCode设为0任何keyboardEvent

要解决此问题,请使用通用事件以编程方式触发事件,而不是使用keyboardEvent

代码可以在this link中看到。函数__triggerKeyboardEvent使用泛型事件以编程方式触发事件。

它在机顶盒中完美运行。