[Titanium]WebViewの遷移先を横取りする

最近まーったくTiを触れていないのですが。書くと役立ちそうな話題を見かけたのでちょっとだけ。

WebViewを利用したアプリケーションの場合によくあるのが、
特定のドメイン(URL)じゃないページへ遷移する場合は、通常のブラウザアプリ(Safari等)で開く
という要件です。
Ti.UI.WebView で、遷移先(遷移しようとしている)URLを知りたい ~ ‘beforeload’ イベントで url が反映されない件 #titaniumjp #titanium – harukazepcの日記

harukazepcさんは、本来こういう用途に使うはずのbeforeLoadが動かないことを指摘した上で、ソースコードにパッチを当てて治す方法を紹介されています。
ちゃんと治せる方はそれが一番だとは思うのですが、再コンパイルにはいろいろ問題もあると思うので、コードレベルでごまかしたノウハウを紹介します。
Androidでも原理的には動く気がしますが、iPhoneでしかテストしていません。あと、HTML側をいじるので、自分の制御下にあるHTML以外で実現することはとっても困難です。

上記WebViewを利用したアプリケーションの場合、普通はアプリ内にあるHTMLをWebViewで表示しているはずです。
というわけで、HTML側にJavaScriptを仕込みます。(jQuery使ってます)

その上で、WebViewをのっけているViewが、linkclickイベントをキャッチしてあげれば、ユーザーがaリンクをクリックした場合の挙動をコントロールすることができます。

特定のリンクだけ自分で処理して、それ以外はWebViewに任せたい時は、HTML側のJavaScriptをいじって、e.preventDefaultを呼び出さないようにすれば本来のaリンクの処理が発動されます。

自分の支配下にないHTML(例えばYahooやGoogleのトップページ)であっても、黒魔術を駆使すれば同様のJavaScriptを送り込むことは不可能ではないはずですけど、めんどくさいのであまりお勧めしません。

自分の場合、tel://で始まるリンクを横取りして、電話の前に確認ダイアログを出すのに使ってました。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です