2016-09-30 41 views
1

我正在尝试 window.parent.document.dispatchEvent(keyboardEvent)TypeError:尝试更改只读属性的值。 defineProperty

我正在这样做赶上 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只是为了测试。

这工作正常,当我运行它在铬。

但这行代码

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

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

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

回答

0

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

机顶盒使用webkit运行JavaScript代码,当keyboardEvent注册和dispatchEvent叫过,对于任何按键,给人的WebKit作为keyCode 0任何keyboardEvent

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

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

它在机顶盒中完美工作。