2016-09-30 40 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正在使用泛型事件以編程方式觸發事件。

它在機頂盒中完美工作。