Titanium Mobile (iPhone) で、アプリの WebView 内HTMLの特定スキームをハンドリングするテクニック
ローカルHTMLや、直接HTMLを書く場合、Titanium オブジェクトがHTML側から可視なので WebView 内部と外部のコミュニケーションは別段難しくない (fireEvent したら良い) のだけれど、リモートHTML (自分のウェブサービスと協調させたいときとか) の場合はそうはいかないので、別の方法が必要。
ということでカスタムスキームは使えないのか? と思ったのだけれど、それらしいAPIはない。こりゃカスタムスキームのハンドリングはできないな、と思いきや別の方法により可能であることがわかった。
前置きともかく以下のようにするとできる。ここではカスタムスキーム名を custom: としている。
var webview = Titanium.UI.createWebView();
// ローカルでもリモートでもどっちでも良い
webview.url = 'http://localhost:5000/sketch.html';
//webview.html = '<!DOCTYPE html><html><body>' +
// '<p><a href="custom:foobar">custom scheme</a></p>' +
//'</body></html>';
webview.addEventListener('error', function (e) {
// "Error Domain=WebKitErrorDomain Code=101 \"The URL can\U2019t be shown\" UserInfo=0x6872120 {NSErrorFailingURLKey=custom:foobar, NSErrorFailingURLStringKey=custom:foobar, NSLocalizedDescription=The URL can\U2019t be shown}"
if (/NSErrorFailingURLKey=custom:(\S+), /.test(e.message)) {
var data = RegExp.$1;
alert(data);
}
});
Titanium.UI.currentWindow.add(webview);コードの通りですが、WebView はハンドリングできないエラーがあると error イベントを発火するので、それをキャッチして処理してやるだけです。なので存在しないスキームしかハンドリングできないです。iPhone だと遷移も発生しないので割といい感じです。
なんか根本的に解決する方法があれば良いのですが、あれば教えて頂けると嬉しいです。
✖
自動CPAN祭 AutoInstall.pm
モジュールが見付からなかったとき自動的に CPAN install するのはなんかあるんですが上手く動いてくれなかったので簡単なのを書きました。最近 perl ごと入れなおすハメになって面倒だったのですがだいぶ楽にいけました。
PERL5LIB パスが通ったディレクトリに以下のスクリプトを置いて、perl -MAutoInstall foobar.pl とかでいけるので便利です。
なんかもっと確実で、良い方法があったらいいのですが、知らないので困った感じです。
✖
✖
必要にかられて、会社 PC を Leopard から Snow Leopard にアップグレードして、だいたい上手く動いてそうだなあと思ったやさき、いろいろおかしくなっていることに気付き、結局自力で入れた全てのライブラリやプログラムを入れなおすハメになり、死にたくなるほど時間がかかっている……
MacPorts だと全力で全部入れなおしになってしまうので sudo rm -rf /opt/local して MacPorts を消しさり、homebrew でセットアップしなおしている。perl も、今までは MacPorts のを使っていたけどやめて、perlbrew で 5.8.8 (アプリサーバとバージョンをあわせて) を導入することにした。
CPAN 祭がつらい……
関連エントリー
- Mac で simavr + avr-gdb を使い AVR プログラムを PC 上でデバッグする Mac の場合 AVR Studio を使えないので、いろいろ不便である。しかし一応開発環境がととのった。結構ググったけど、このようにして開...
- PowerToys で macOS 風キーバインドを導入したときに生じる PowerShell の不便の解消 Windows PowerToys の Keyboard Manager を使って macOS 風のキーバインドを導入するというのをやってい...
- LPC11U35 の mbed ローカル開発環境構築 秋月でLPC11U35 が乗っているボードを買った。うっかり3枚買っていた。EA LPC11U35 QuickStart Board と互換...
- Mac に RMagick がインストールできない。 $ sudo /usr/bin/xcode-select -switch /Applications/Xcode.app/Contents/...
- BLE Nano (nRF51) + mbed でセキュリティ付きペアリングをして 0x3d エラーがでる 0x3d はMessage Integrity Check (MIC)が失敗した、というエラーらしい。ホスト側で発生する。デバイス側から送ら...
✖
久しぶりに 50mm F1.4 を使って撮ったりした。開放でとるとかなり甘いうえに周辺減光が激しいので、流行りの instagram っぽい感じになる。F5.6 ぐらいまで絞るとシャープになるので面白い。
50mm の感覚を忘れていて、100mm にすると落ち着くようになってしまった。
関連エントリー
- ✖ 府立植物園 上賀茂神社 下鴨神社 でかける予定はなかったけれど、家にいても仕方ないというか寒くて嫌だったので外出。なんとなく 50mm F1...
- SIGMA 35mm F1.4 DG HSM | Art を買った SIGMA 単焦点広角レンズ Art 35mm F1.4 DG HSM キヤノン用 フルサイズ対応 340544 cho45 シグマ(Sig...
- ✖ EOS + (50mm F1.4) でも f5.6 ぐらいまで絞ればちゃんとシャープになるようだ。等倍で見ると DP2 のも EOS のもそ...
- ✖ キヤノン Canon 単焦点マクロレンズ キヤノン EFマウント EF100mm F2.8L マクロ IS USM フルサイズ対応 cho4...
- ✖ Canon 望遠ズームレンズ EF70-200mm F2.8L IS II USM フルサイズ対応 cho45 キヤノン ★ 3.0 / 5...
✖
- 余白はなおした
- 記事一覧ページも微妙ながらあてた
✖
本文の背景が真っ黒だとなんか気取ってる感ある……
#000 -> #111
Snow Leopard / Lion にしたら vim の中から起動する perl がシステムデフォルトの perl に固定されてしまった。
Snow Leopard が余計なことをするようになった。なんとなく "vim path /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin" とかでググっていたら、http://d.hatena.ne.jp/yhino/20100908/1283963661 というエントリがひっかかってくれた。
/etc/profile とか /etc/zshenv とかで /usr/libexec/path_helper というプログラムを実行してシステムのパスを先頭に追加するとかしているので、vim のような環境で、~/.zsrhrc が呼ばれない場合、システム側のしか呼ばれなくなっている。本来 PATH 通しとかは ~/.zshenv に書くべきなので、自分も悪いのだけれど、PATH の管理ぐらい自分でできるし、余計なことをしてほしくないので以下のようにした
$ lm /usr/libexec/path_helper -r-xr-xr-x 1 root wheel 50K 5 19 2009 /usr/libexec/path_helper* $ sudo chmod -x /usr/libexec/path_helper $ lm /usr/libexec/path_helper -r--r--r-- 1 root wheel 50K 5 19 2009 /usr/libexec/path_helper
単に実行権限をなくした。
はてなダイアリーのCSSを簡単に書けるようにする
はてなダイアリーのCSSを編集するのはなかなか骨の折れる作業で、とりあえず HTML を落としてスタイルをあてたりしても、ある程度できあがってからは、自分のダイアリに実際に反映してしまって、オンザフライで、あの designdetail のページでCSSを修正してしまったりするものです。
とはいえ、あのフォームはトライアンドエラーを繰替えすには大変なので補助するスクリプトを書きました。
以下を保存して実行すると (Config::Pit で user と pass を指定する必要があります)、$EDITOR で現在のデザインCSSを開き、保存すると反映される状態 (1秒ごとにチェックしており、HTTP で POST しているので、保存してすぐとはいきませんが) になります。
また、ミスって変更しても戻せるように、~/.hatenadiarydesign/ 以下にバックアップを作りまくります。





