著作一覧 |
<IMG SRC="data:image/png;base64,.....">
ネスケ7.1は表示できるが、IE6はだめぽ。
HKLMHKCR\MIME\Database\Content Typeには、image/pngは登録されているし、ファイルならちゃんと表示される。
もうちょっと試して見るが、どうしてこう、いつも期待を裏切ってくれるのか?
ちなみに、RFC(2397 The "data" URL scheme)は1998年にはもう出ている。
Jpegでもだめだ。Jpegもだめなら、だめなんだろう、きっと。ActiveXコントロールをサポートしたりするより、こういう基本的なところをちゃんとやってくれよう。ネスケでも表示できなければ、こっちのバグだと思うんだが、あっちは表示できるんだよね……
s = ''
File.open(ARGV[0], 'rb') do |x|
s = x.read
end
data = [s].pack('m').gsub("\n", "")
s=<<EOD
<html>
<body>
<img src="data:image/png;base64,#{data}" ALT="IE使ってますね!">
</body>
</html>
EOD
puts s
というわけで、画像の動的生成はC#で簡単にできる。
しかし、HTMLにそのまま吐き出すことは今のところ無理ぽ。
しかし、事情があってサーバー側にファイルとして出力するわけにはいかない。しかも、IEは拡張子を見る腐れ仕様の持ち主だから、<IMG SRC="hogehoge.aspx&postできないじゃん。まあクッキーをうまく使うしかないだろうな。">がうまくいくかはわからんし(Content-Typeを見ないということはさすがに無いだろうから、これが有力候補だけど)、何しろ拡張子だからaspxを仮想的にPNGにするってのも問題ありそうだ。
って言うか、IE独自のDHTMLタグとかでdata:の代替がありそうな気もするなぁ。
大した話ではなく、単に
private void Page_Load(object sender, System.EventArgs e)
{
Response.ContentType = "image/png";
Response.BinaryWrite(makeImage());
Response.Flush();
}
とするだけ。いくらIEでも、拡張子がASPXでもContent-Typeは見るようだ。
やっとわかった。RFC1866 (Hypertext Markup Language 2.0)の8.2.1だ。URIやMIMEの資料を見ても出てないはずだ。
The default encoding for all forms is `application/x-www-form-
urlencoded'. A form data set is represented in this media type as
follows:
1. The form field names and values are escaped: space
characters are replaced by `+', and then reserved characters
are escaped as per [URL];
RFC2397で言及されているAでのURLの長さ制限についてちょっと見てみようか(ブロードバンドじゃ気にする必要は無いとは思うけど、10K越えてるわけだし)と思って読んでいたら見つけた。以前、読んだはずだけど、完全にこの文書そのものを忘れていたようだ。
ジェズイットを見習え |
w3m-m17n でしっかり見えますた>くまとタコ。<br># こんな小技があったのか。しかし IEださっ
w3mあなどりがたし。まあ、data:の使い道はHTMLメール送ってくるリッチコンテンツ大好きなOEな人を誘導して「画像見えない? プッ」とやるくらいかな。<br>#マジなところ、IEがヘタにサポートすると 1.バッファオーバーランしたり 2.テンポラリファイルをローカル権限で実行 とか、セキュリティホールが空くだけだから、サポートしないってのも見識かも。と自分を慰める……