人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

WEBブラウザのフォームに自動入力できるようなツールを入手したい、もしくは、簡単につくりたいです。
ブラウザは、windowsのIEとAndroidの標準ブラウザです。入力データは名前、メールアドレスなど5項目ほどあり、テキストを入力するフォーム、プルダウンで選択するフォームがあります。入力後、あるボタンを押したいです。そのデータが複数セットあり、表形式で管理できると助かります。その表を、両ブラウザで共通に使いたいのです。
ちょっと調べた範囲では、ExelのVBAを使えばできそうですが、Androidでできるのか、わかりませんでした。他の方法でも結構です。
ご教示ください。


●質問者: 匿名質問者
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● 匿名回答1号
ベストアンサー

データをHTML文書にしてどっかのサーバーにアップロードしておいて、
入力するときはbookmarkletからiframeを作ってデータを読み込んで……みたいな。
クロスドメイン制限を打ち破るためにはwindow.postMessageを使う。
https://developer.mozilla.org/ja/docs/DOM/window.postMessage


匿名質問者さんのコメント
ご回答ありがとうございました。 ソフト素人ですが、ググってみて、bookmarklet, iframeは何となくイメージを持てました。この方法であれば、htmlなのでwindows, androidともに共通のhtmlで対応可能、実行するための環境は特に必要なし(通常のブラウザであれば、javaが実行できる環境になっている?)と理解しました。あっておりますでしょうか? 一方、クロスドメイン制限、window.postMessageが理解できず苦しんでおります。どのようなものなのか、素人に対して簡単にご説明いただけると助かります。 また、最終的には、htmlにjavaスクリプトを記述することになるので、javaを勉強しないといけないということでよろしいでしょうか? 恐れ入りますが、ご回答よろしくお願いいたします。

匿名回答1号さんのコメント
先の回答内容は、HTMLとJavaScriptが分からない人には親切ではないですね。 もっと良い方法を書いてくれる方がきっと出てくると思ったので、 こんな方法もあるぐらいにしか書かなかったのですが…… クロスドメイン制限というのは、セキュリティ上の理由で、 bookmarkletを実行したときに開いているページのドメインと、 iframeで読み込んでいるページのドメインが異なる場合に、 bookmarkletのJavaScriptコードからiframeの中身の読み取りや書き込みが できないという決まり事です。 bookmarkletではまず'message'イベントリスナを登録します。 window.addEventListener('message', 'listen', false); と書くと、postMessageによるメッセージを受け取ったときに function listen(event){…}を実行するようになります。 iframeで読み込む方のページからはpostMessageで親ウィンドウのドメインに向けて メッセージを送ります。 window.postMessage('内容', '親ウインドウのドメイン'); するとfunction listen(event){…}の引数eventに、 受け取った内容などを含むオブジェクトが入るので、 event.originをまずチェックしてiframeで読み込んだページのドメインじゃなかったら function listen(event){…}の処理を終了。 iframeで読み込んだページのドメインだったら、 event.dataを思う存分ゴニョゴニョ。 あっ、もしかして、 bookmarkletからもpostMessageでiframeのページにメッセージを送る必要があるのかな?? 自分も半年前に一回こういうのやったきりでよく分かっていないので 脳内シミュレーションだけでは上手く説明できないですね。 http://zafiel.wingall.com/archives/6631 にデモページがあるので、具体的なソースを見た方が分かりやすいです。

匿名回答1号さんのコメント
補足がついたので、それについて。 ドメインが一緒ならクロスドメイン制限とかwindow.postMessageとか 気にしなくていいですね。 色んなサイトのフォームに入力する作業を省力化したいものだと こちらで勝手に勘違いしていました。 余計なことを長々書いて混乱させたかもしれません。 申し訳ないです。 さて、 >?あるページ(ページ1)のリンクをクリックして、別のページ(ページ2)に移動する。 >・ページ2からページ1への移動が可能か否か? ですが、 location.href = '移動先のアドレス'; でいいのでは?と思います。 リンクをクリックというのは、たとえばそのリンクにIDが付いているなら、 <a href="foo.html" id="bar">リンク</a> var element = document.getElementById('bar'); location.href = element.href; こんな感じで。 また、たとえばA要素が沢山あるうちの23個目のA要素だったら、 var element = document.getElementsByTagName('a').item(22);//item(0)が1個目なので。 ページ間でデータのやり取りをしたいならlocalStorageを使うといいですね。 >・この質問文だけではわからない場合、可能か否かを調べる方法 これについては何とも言えないです。 インターネットで情報を公開するのができないなら、 こちらとしては、メールでやり取りというのでも別にかまいません。 まあそれも守秘義務があってできないのかもと思いますが。

匿名質問者さんのコメント
ご回答ありがとうございます。 おかげさまで「?のみ」「?のみ」はできるようになりました。ただ「?→?」ができないで苦戦しております。私のタイプミスの可能性もあるのかもしれませんが... 確認したいことがございます。 bookmarkletをページ1で実行して、location.href='ページ2のアドレス'にした後、 document.getElementById("name").value="太郎" みないなことはできますでしょうか? よくわかってなくて申し訳ないのですが、例えば win = window.open('ページ2のアドレス') win.document.getElementById("name").value="太郎" のようなことはしなくてもよろしいのでしょうか?(この2行があっている自信もないですが) 恐れ入りますが、よろしくお願いいたします。

匿名回答1号さんのコメント
スマホを持ってないのでAndroidの標準ブラウザで window.open()がどう動くのか分からないです。 自分だったらlocation.hrefを使うより、こういう感じにするかな。 javascript:(function(){ var iframe = document.createElement("iframe"); iframe.src = 'ページ2のアドレス'; document.body.appendChild(iframe); var win = iframe.contentWindow; win.addEventListener("DOMContentLoaded", entryForm, false); function entryForm() { win.document.getElementById("name").value="太郎"; document.body.removeChild(iframe); } })();

質問者から

ご回答ありがとうございました。

昨晩、bookmarkletに簡単なjavascriptを記述して、やりたいことの半分はできました。やりたいことは
?あるページ(ページ1)のリンクをクリックして、別のページ(ページ2)に移動する。
?ページ2において、必要なデータを入力後、ボタンをクリックする。
なのですが、?はできるようになりました。

ページ2はページ1の一つ下の階層になります。この場合、クロスドメイン制限はない(自由にアクセスできる)と思ってよろしいでしょうか?
クロスドメイン制限とwindow.postMessageを丁寧にご説明いただきましたが、まだ理解できておりません。申し訳ございませんが、
・ページ2からページ1への移動が可能か否か?
・この質問文だけではわからない場合、可能か否かを調べる方法
をご教示いただけると助かります。また、質問させていただきながら、ページ1とページ2のURLを開示できないこと申し訳ございません。
よろしくお願いいたします。


関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ