WebKitカーネルブラウザinit KeyboardEvent関数のプロトタイプ
4203 ワード
JSを学習してカスタムキーボード(KeyboardEvent)イベントを送信する過程で、一つのボタンTabを正常に送ることができ、次の要素に焦点を移すことができますが、Shift+Tabを実現したいです.逆にフォーカスを移動すると、DOM 3のブラウザの互換性に問題がかかりにくくなります.は参考資料1(Javascript事件シミュレーション-Mr_BackKom-ブログパーク)の方法によって、通用しません.私のブラウザはWebkitの核心の下にあります. また参考資料2(Document Object Model Events嗳Events-KeyboardEvent)を探して、DOM 3の中の KeyboardEvent.init KeyboardEvent関数の定義は以下の通りです. しょうがないので、Webkitソースコードをダウンロードして、直接にコア実現のソースコード関数プロトタイプを探します.結果は以下の通りです.
シミュレーションShift+Tabコードは以下の通りです.
void initKeyboardEvent(in DOMString typeArg,
in boolean canBubbleArg,
in boolean cancelableArg,
in views::AbstractView viewArg,
in DOMString keyIdentifierArg,
in unsigned long keyLocationArg,
in DOMString modifiersList);
資料1の経験によって、DOM 3標準を使って呼び出したが、結局失敗した.void KeyboardEvent::initKeyboardEvent(const AtomicString& type, bool canBubble, bool cancelable, AbstractView* view,
const String &keyIdentifier, unsigned location,
bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey)
{
if (dispatched())
return;
initUIEvent(type, canBubble, cancelable, view, 0);
m_keyIdentifier = keyIdentifier;
m_location = location;
m_ctrlKey = ctrlKey;
m_shiftKey = shiftKey;
m_altKey = altKey;
m_metaKey = metaKey;
m_altGraphKey = altGraphKey;
}
このプロトタイプで再度呼び出し、ついに成功しました.(PS:ソースがいいですね.)シミュレーションShift+Tabコードは以下の通りです.
var evt = document.createEvent("KeyboardEvent");
evt.initKeyboardEvent("keydown", true, false, window, 'U+0009',0,false,false,true,false,false);
e.currentTarget.dispatchEvent(evt);
By:Asion TangAT:2013年9月20日23:58:40