忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/08/20 07:36 |
iPhoneOS4.1 デフォルトメーラのバグ
iPhoneのデフォルトメーラには、「添付したインライン画像とは違う画像が表示されることがある」というバグが存在します。

インライン画像付きHTMLメールは、以下のような構文となります。
<img src="cid:01@image.gif">

普通であれば<img src="image/01.gif">というような形になるところですが、インライン添付では画像が置いてあるURLとか無いので、かわりにcidという画像を結びつける記号を設置します。
ちなみに例ではgifという拡張子を指定していますが、別にそうする必要はありません。
@の前はランダムな値、@の後はドメイン名を指定し、<img src="cid:ecabf869473b42c110b1@example.jp">などとしている例が多いようです。
これは、cidは世界で一意であることが求められているためです。

で、具体的な画像は、BASE64エンコードでテキスト化した上でメール本文に格納されます。

Content-Type: image/gif; name="image01.gif"
Content-Transfer-Encoding: base64
Content-ID: <cid:01@image.gif>

R0lGODlh2QA9ALMIAFOKz6jK…(略)

メーラでは、<img src>のcidがこのContent-IDと結びつけられ、タグの部分に画像として展開され、表示されます。


では、もしこのcidが被ってしまうという事態があったらどうなるでしょうか。

一通のメールで同じcidを指定するというのは、単に同じ画像を連続で表示するというだけのことです。
複数のメールで同じcidを指定してみましょう。

GmailやPC用、iPhone用の多くのメールアプリでは、もしcidが被ったとしても、全く問題無く添付画像を表示します。
cidをメール単位で識別しているので、他のメールに同じcidが入っていたとしても顧みることは普通ないからです。

翻ってデフォルトメーラでは、中身を見たわけではないので推測ですが、以下のように動作していると思われます。
まず一通目のメールを見た際に、そのcidに対応する画像がキャッシュに登録されます。
そしてその後再度メールを見た際、cidに対応する画像がキャッシュに登録されていれば、その画像を表示します。
おそらく高速化のためにそうしているのだと思われますが…ここにひとつ落とし穴があります。

同じcidであればメールを気にせずキャッシュから読み込むんだよね。


どういうこと?
ちょっとRFC準拠が足りないメールアプリがあったとして、cidを連番で付けちゃう仕様になっていたとします。


一通目。
絶対に許さない<img src="cid:01@image.gif">
添付画像:icon_bad2.gif

二通目。
ごめんね<img src="cid:01@image.gif">
添付画像:icon_heart.gif


Gmailから見ると送信したとおりのメールが見れます。

で、これをデフォルトメーラで見ると、


一通目。
絶対に許さないicon_bad2.gif

二通目。
ごめんねicon_bad2.gif


これじゃあ戦争になっちゃうよ!


問題は、送信側は全くこのことに気がつくことができないという点です。
たしかにRFCを守ってない送信側メーラが悪いと言えばその通りなのですが、メール単位で絞り込みは可能なわけなんだからそのくらい対応してやれと。
 

 

PR


2010/11/29 23:30 | Comments(0) | TrackBack(0) | iPhone
iPhoneOS4.1 キーボードの改行ボタン名を変更したい
UITextField.returnKeyTypeを変更すればいい、というのはここらへんにも出ているとおりです。
http://developer.apple.com/library/ios/
http://www.asahi-net.or.jp/~YY8A-IMI/20040913/ipad/uikit4.htm
http://iphone-tora.sakura.ne.jp/uitextfield.html

何故かどのサイトも日本語表記がなかったり半端だったりですが、突っ込める型と表記の対応は次のようになります。

 

UIReturnKeyDefault Return 改行
UIReturnKeyGo Go 開く
UIReturnKeyJoin Join 接続
UIReturnKeyNext Next 次へ
UIReturnKeyRoute Route 経路
UIReturnKeySend Send 送信
UIReturnKeyDone Done 完了
UIReturnKeySearch Search 検索
UIReturnKeyGoogle Google 検索
UIReturnKeyYahoo Yahoo! 検索
UIReturnKeyEmergencyCall EmergencyCall 緊急電話


で、このreturnKeyTypeに突っ込めるのはUIReturnKeyTypeなのですが、このUIReturnKeyTypeはenum型です。
つまり
UITextField.returnKeyType = @"(・∀・)";
みたいなことができないんだYo!

なんかこうUIReturnKeyType.addObject(UIReturnKeyHoge)みたいなものはないのか?


任意の文字に変更できないか探したんだけど日本語記事はまったく存在しないのな。
ようやく見つけたのが此処。
http://www.neoos.ch/news/46-development/54-uikeyboardtypenumberpad-and-the-missing-return-key

要するにキーボードに画像を重ねて表示する、って解決法でした。
がくり。

コメントを見ていたらもう少しスマートっぽいやり方が載っていました。

> I found a way to resolve this problem: use becomeFirstResponder and resignFirstResponder to handle keyboard notification on UITextField. Just look this image:
>
http://www.yonsm.net/attachment/1283431378_38117112.png
>
http://www.yonsm.net/attachment/1283431378_98952583.png
>
http://www.yonsm.net/attachment/1283431378_246664d4.png
> or download the sample project:
http://www.yonsm.net/attachment.php?fid=45

試してみたのですが見事にうまくいきませんでした。
そのKBCustomTextFieldってどこから来るの?
 



2010/11/15 22:23 | Comments(0) | TrackBack(0) | iPhone

| HOME |
忍者ブログ[PR]