2016-09-30 7 views
1

私は試しています window.parent.document.dispatchEvent(keyboardEvent)です。TypeError:readonlyプロパティの値を変更しようとしています。 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を与えているようなものです。

これはChromeで実行するとうまく動作します。

ただし、このコード行

Object.defineProperty(keyboardEvent, "keyCode", {"value" : 666});
thorws "TypeError:読み取り専用プロパティの値を変更しようとしています。defineProperty"私はセットトップボックスでコードを実行します。

これは、上記のコードのためのplnkrリンクhttp://plnkr.co/edit/my8HkFpRqZRDrFYgIxXL?p=preview

私は、キープレスイベントを自動化することができますので、どのように私は、セットトップボックスで正しいキーコードをキャプチャすることができますか? 上記のコードに余分な行を追加/変更して、セットトップボックスに正しいキーコードを与えることはできますか?

答えて

0

この問題を解決しているthis linkが見つかりましたので、私自身の質問に答えています。

セットトップボックスは、JavaScriptコードを実行するためにwebkitを使用しており、任意のキーを押しためにその上keyboardEventが登録されているとdispatchEventが呼び出されたとき、WebKitがkeyCodeどのkeyboardEvent 0として提供します。

この問題を解決するには、keyboardEventを使用する代わりに、イベントをプログラムでトリガする汎用イベントを使用します。

コードはthis linkで見ることができます。ここでは、関数__triggerKeyboardEventが汎用イベントを使用してプログラムでイベントをトリガしています。

セットトップボックスでは完全に動作します。

関連する問題