0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ボタンのクリックをエミュレートする

Last updated at Posted at 2012-12-20

Vimperatorでボタンクリックをエミュレートする

もっと直接的な方法が用意されてる気もするけど・・・

2012.12.21 追記

buffer.followLinkでできるよって教えてもらいました。
あと、node.click()よりもDOMEvent使うべきってつっこみももらいました。
ありがとうございます。

(追記) buffer.followLinkを使うパターン

教えてもらった、buffer.followLinkを使うパターンです。
これならjquery-loaderをインストールする必要もないですね。

.vimperatorrc
map ;te :js buffer.followLink(content.document.querySelector("form#modifypage").querySelector("input[type=submit]"), liberator.CURRENT_TAB)<CR>

1. jquery-loaderプラグインをインストールする

https://github.com/vimpr/vimperator-plugins/blob/master/jquery-loader.js
このjquery-loader.js を ./vimperator/plugin に置いて、.vimperatorrcにjquery.js へのパスを指定する。

.vimperatorrc
let g:jquery_filepath = "jquery.jsのパス"

2. 押したいボタンに応じて、.vimperatorrc に定義を追加する

mapでjavascriptコマンド呼ぶか

.vimperatorrc
map ;te :javascript jQuery.core("form#modifypage").find("input[type=submit]")[0].click()<CR>

もうちょっと丁寧にコマンドを定義するか

[2012.12.21 編集]
DOMEvent使うべきってつっこみをもらったので、 書きなおしました。

.vimperatorrc
javascript << EOS
commands.addUserCommand(['trace[dit]'], '[Trac] Enter wiki editor', 
    function () {
        let nodes = jQuery.core("form#modifypage").find("input[type=submit]");
        if (nodes.length != 1)
            return;
        let evt = document.createEvent("MouseEvents");
        evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0,
                           false, false, false, false, 0, null);
        nodes[0].dispatchEvent(evt);
    }
);
EOS

ちなみにこれはTracのWikiで「このページを編集」ボタンを押すための設定。

3. サイトを制限する

これだと対象じゃないサイトでも動いてしまうけど、ちゃんと目的のサイトでだけ動くようにしたいなら autocmd LocatioChange と組み合わせればいいかな。

.vimperatorc
" 127.0.0.1:5000/trac にいるときだけ is_tracをtrueにする
autocmd LocationChange .* :js var is_trac = false
autocmd LocationChange 127\.0\.0\.1\:5000\/trac.* :js var is_trac = true

javascript << EOS
commands.addUserCommand(['trace[dit]'], '[Trac] Enter wiki editor', 
    function () {
        if (!is_trac) return;
        // 以下略                  
    }
);
EOS
0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?