[Titanium] webviewのリンク先をブラウザで開く

stockxchng_331498_2788_stormy.jpg

WebViewで開いたページに対して、リンクをクリックした時の挙動をコントロールしたい、というのは人類共通の願いで、過去にもたくさんの方がブログ記事を書かれています。

最初の2つは、webviewのbeforeLoadイベントを使う例で、あとの2つは(もぎゃろぐとひげろぐ。ぷぷぷっ)HTMLの中でリンククリックをハンドリングして、Ti.App.fireEventでアプリに飛ばしたイベントを使って何とかしようという例です。

前者は、iOSとAndroidの違いやTitaniumSDKのバージョンによって動いたり動かなかったりしているのが難点で、後者は、JavaScriptのコードがバグっているとデバッグが超大変(printfデバッグすらできない!)なのが難点です。

さて、ありがちな要求として、ランチャーがわりにローカルのHTMLファイルをwebviewで開いておいて、その後のリンク先は全部ブラウザで開いてほしい、という要望が考えられます。というかボクが欲しかったのにそういうサンプルが見当たらなかったので、自分で書きました。

ポイントとしては
  • beforeLoadは最初のローカルHTMLの読み込みに対しても呼び出されますので、urlが'file://'かどうか確認して、ローカルファイルじゃない時だけ処理するようにしています。
  • beforeLoadでブラウザを開いたとしても、webview自体が次のページを読みに行ってしまうことは阻止できません。できるのかもしれないですけど、うまいやり方を思いつかなかったので、stopLoadingで阻止しつつ、念のため、loadイベントで戻れるときはgoBackさせて強引に最初のページを維持させています。
    これをやっておかないと、特にAndroidでBACKボタンを押してアプリに戻ってきた場合に、次のページを開いているwebviewが見えてしまいます。
  • 余談ですが、Ti.Platform.openURLって、Androidだとちゃんとインテントを聞いてくれるのですね。問答無用で標準ブラウザが開くのだと思っていました。

TitaniumSDK2.1.2GAだと、AndroidとiPhone両方で動作しています。
この例はbeforeLoadイベントを使っているので、将来的にまたSDKがバグったり直ったりすると、また動かなくなるかもしれませんが、その時は自力でがんばってくださいませ:-)

カテゴリ:

トラックバック(0)

このブログ記事を参照しているブログ一覧: [Titanium] webviewのリンク先をブラウザで開く

このブログ記事に対するトラックバックURL: http://mogya.com/mt/mt-tb.cgi/1565

コメントする


画像の中に見える文字を入力してください。

このブログ記事について

このページは、 もぎゃが 2012年9月30日 02:54に書いたブログ記事です。

ひとつ前のブログ記事は「 [Titanium] dpとpixelの変換 」です。

次のブログ記事は「 英語環境の人に機械翻訳を提案するスクリプトMayITranslate 」です。

最近のコンテンツは インデックスページ で見られます。過去に書かれたものは アーカイブのページ で見られます。

Powered by
Movable Type