2012年9月9日日曜日

chrome extensionからのform submit


Chromeの拡張を使って、開いているWebページのformをsubmitしたくて色々調べていました。

結論からいうと、とりあえずできなかった。

やろうとしてたのはこんな検索formのwebサイト。

まず調査したこと。

Q1. Chrome拡張から表示しているサイトのjavascriptを実行できるのか?
A1. できない

残念。

Q2. Chrome拡張から表示しているサイトのDOMを操作できるのか?
A2. できる。

おお!

content scriptというのを使うとできるらしい。

content scriptでできることできないこと。

できること。
  • linkされていないURLを探し出し、hyperlinkに変換する
  • フォントサイズを大きくする
  • DOM操作


できないこと。
  • chrome.* APIの利用(chrome.extensionは利用できる)
  • 拡張で定義されたjavascript関数や変数の利用
  • Webページや他のcontent scriptで定義したjavascript関数や変数の利用

dom操作ができるということで、document.forms['fname'].submit();とかdocument.getElementByName('fname')とかでsubmit出来ないかと次いで調べてみた。

調べたところ、どうやら、そもそも<form>要素のなかで<input type="submit">を定義してしまうと、<form>の外からsubmitが出来ないようだ。

具体的なコードを示して説明する。
下記のようなコードだと、submitされなかった(/foo/barにページ遷移されなかった)
submit


しかし、次のように<input type="submit">をなくすと、きちんとsubmitされた(/foo/barにページ遷移された)
submit


操作したかったページには<input type="submit">が定義されているので、dom操作でsubmitするのは無理そう。

なんか他にないだろうか。