[メモ] Javascriptのclickが呼び出せない時の対処法

Androidアプリをつくっていて、WebView内のWEBページに対してJavascriptのclickを呼び出す処理を実装。
参考: http://web-terminal.blogspot.jp/2013/05/androidwebviewjavascripthtml.html
     http://dayafterneet.blogspot.jp/2011/08/androidwebviewjavascript.html
    このへん

で、全く同じアプリであるにもかかわらず、なぜか手持ちのNexus7(初代)では意図した動き(ページ内の特定のポイントをクリックした時の動作を呼び出したい)が動くにもかかわらず、開発ボードの ODROID-X2 で動かそうとしたらうまく動いてくれない。
今回作っているアプリはこのODROID-X2を実機として動かす予定の物のため、これではまずい!
ということで色々と調べて見ると、elementは取れているにもかかわらず、 onclick が実行されていない!
さらに良く調べると、Javascriptを使うとき、firefoxでは普通にclickを呼び出しても動かないと言う情報を発見。
参考: http://d.hatena.ne.jp/language_and_engineering/20090907/p1

ということで、上のページを参考に、もともとはシンプルに

wv_bottom.loadUrl("javascript: parent.frames[0].document.getElementById('label1').click(); ");

(中身が決してシンプルではない、というツッコミはご勘弁を。動かしたい対象のWEBページが自作ではなく、ある公共機関のWEBページ上のコンテンツなんですが、そこがフレーム使いまくったへんな構造のWEBサイトになっていて、こういう形で記述しないとエレメントが取れなかったのです…)
していたソースを

wv_bottom.loadUrl(
"javascript:" +
"var evt = parent.frames[0].document.createEvent('MouseEvents');" +
"evt.initEvent( 'click', false, true );" +
" parent.frames[0].document.getElementById('label1').dispatchEvent(evt); "
);

こんな風に変えたら、無事動いてくれました。

まぁ、結局のところブラウザによって対応している呼び出し方があると言うところなんでしょうけど、端末によってこういう違いがある可能性にぱっと気づけないあたり、まだまだ勉強が足りませんな。

Javascriptももう少しちゃんと勉強しなきゃなぁ~。
勉強しなきゃいけないことが多すぎる…

=====================================気になる情報
エプソン、320インチ相当の画面表示可能なメガネ型 Android 端末「MOVERIO BT-200」発表、価格7万円前後で4月24日発売

約5000円と激安の超小型PC「CuBox-i1」でAndroidとLinuxを動かしてみた

日本独立作家同盟、「月刊群雛 (GunSu) ~インディーズ作家を応援するマガジン」をEPUB/BCCKS形式で本日創刊

Curlコマンドをわかりやすく貼り付けるための『embed curl』

UXデザインをアプリ制作のワイヤーフレームとプロトタイプに取り入れるケーススタディ

Androidアプリの署名<KeyStore Keytool AndroidDebugKey>

朝日・木村社長「朝夕刊セット主義からの脱却を」「取材部門で別会社設立へ」

PHPを使ってAjax通信のクロスドメインに対応する方法



Cybercrime and Espionage: An Analysis of Subversive Multi-Vector Threats
Syngress
Will Gragido

ユーザレビュー:

amazon.co.jpで買う
Amazonアソシエイト by Cybercrime and Espionage: An Analysis of Subversive Multi-Vector Threats の詳しい情報を見る / ウェブリブログ商品ポータル

HTML5 Pratico. Per Web App. Guida completa di HTML5 per le web app (Esperto in un click)
Area51 Publishing
Alberto Misuraca

ユーザレビュー:

amazon.co.jpで買う
Amazonアソシエイト by HTML5 Pratico. Per Web App. Guida completa di HTML5 per le web app (Esperto in un click) の詳しい情報を見る / ウェブリブログ商品ポータル

この記事へのコメント

Androidから開いたPDF中のURLリンク無効
2016年05月09日 23:15
突然のコメントすみません。
私は某メーカーで働いており、職場や友人にAndroidについて詳しい人がいなかったため、ネットからヤメ記者SEさんのブログにたどり着きダメもとでお伺いさせてください。

■問題
実は、お客様が、配付したPDFファイル中のURLをクリックしても、ハイパーリンクが動作せず、Webブラウザが起動しないという問題が発生しました。

iPhoneを使っているお客様はPDF中のURLをクリックすると、Webブラウザが立ち上がります。

しかし、Androidを使っているお客様は、PDF中のURLをクリックしても、Webブラウザが立ち上がらないのです。

■PDFビューワーが原因

ネットを調べてみると、AndroidのPDFビューワーを変えればよいという情報があったため、
初期のPolarisOffice4.0 というPDFビューワーから、
qPDF Viewer Free PDF Reader というPDFビューワーをインストールしなおして試したところ、
PDF中のURLをクリックし手も、Webブラウザが立ち上がるようになりました。

■ご質問

上記のようにPDFビューワーを変えると、AndroidスマホからでもPDF中のURLをクリックしWebブラウザを立ち上げることができますが、すべてのAndroidお使いのお客様に対して、PDFビューワーをインストールしてもらうのはできれば避けたいです。

PDFビューワーを変える以外に何かよい手段をお持ちであればご教授願えませんでしょうか。

唐突な質問で大変恐縮ですが、もしよろしければ返信お待ちしております。
よろしくお願いいたします。
kin
2016年05月14日 09:40
名無し様
初めまして。
回答が遅くなりました。
おたずねのPDFについてですが、大前提としまして「Android自体にPDFを開く機能はない」ことをご理解ください。

iOSは標準でPDFビュワー機能を持っておりPDFを表示出来ますが、Androidは外部アプリをインストールする必要があります。

外部アプリをインストールしなくても、PDFが表示できるかもしれませんが、それはあくまで、端末に外部アプリがプリインストールされているだけ(お問い合わせ頂いたPolarisOffice4.0がこれに当たります)です。

外部アプリにつきましては、利用する端末により異なるソフトウェアがインストールされているため、A端末ではリンクは動かないが、B端末ならリンクも正常に動く、という状況が起きているのではないでしょうか。

アプリによって機能が変わってしまうのは、Androidに限らず、WindowsなどのPCでも同様ですので、お答えとしましては、PDFビューワーを替える以外に手段はなく、例えば、皆さんで同一端末を利用されるのなら、はじめから標準ビューワーでリンク機能が使えるアプリがインストールされている端末を選ぶ、などの方法を考えるしかありません。

ちなみに、PDFは、元々Adobe社が開発していたものです。
このため、現在でも、PDFの機能をフルに活用するのに最適なアプリは、Adobe社が提供するアプリを利用するのが確実です。
AndroidでもAdobe社がPDFビューワーを提供していますので、どのアプリが良いか分からないと言うことであれば、こちらのアプリをご利用されるのが良いかと思われます。
https://play.google.com/store/apps/details?id=com.adobe.reader&hl=ja
回答遅くなりました。
2016年05月21日 15:32
お礼が遅くなりすみません。

丁寧に答えていただきありがとうございました。

私の使っているPDFビューワー「PolarisOffice4.0 」制作会社などにも問い合わせてみたのですが、やはりPDFビューワーを変える以外に手段はなさそうです。

アドバイスいただいたAdobe社を標準利用する方向で進めたいと思います。

この記事へのトラックバック

テーマ別記事