CGI::Applicationで、IE6のときだけXML宣言を消すHTMLを生成する
スポンサードリンク
Windows IE6は、XML宣言があると後方互換モードでレンダリングされる不具合があるので、標準準拠モードにするにはXML宣言を取っ払う必要がある。他のブラウザはそういう問題がないので、XML宣言つけておきたい。というときに、CGI::Applicationで、能動的にプラウザの種類によって吐き出すHTMLを変えてやろうという魂胆です。
CGI::Applicationでは、cgiapp_postrunで、吐き出す寸前のコンテンツを書き換えることが出来るので、ここで、ブラウザがIE6で、かつContent-Typeがtext/htmlの時だけ、XML宣言を取っ払うコードを書いておけばOK。
CGI::Application::Plugin::BrowserDetectが初めて役に立ちました。
#!/usr/bin/perl
package main;
my $webapp = WebApp->new();
$webapp->run();
package WebApp;
use base 'CGI::Application';
use strict;
use warnings;
use CGI::Application::Plugin::BrowserDetect;
sub cgiapp_postrun {
my $self = shift;
# WinIE6の時にXML宣言を外す
my $output_ref = shift;
my $b = $self->browser;
if ( ({$self->header_props()}->{'-type'} eq 'text/html') &&
( ( $b->windows ) && ( $b->ie )
&& ( $b->major < 7 ) ) ) {
$$output_ref =~s/<\?xml .+\?>\n?//so;
}
}
sub setup {
my $self = shift;
$self->start_mode('start');
$self->run_modes(
start => 'start',
);
$self->header_add( -type => 'text/html',
-charset => 'UTF-8' );
}
sub start {
my $self = shift;
my $tmpl_html = << 'END_OF_HTML';
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8" />
<title>test</title>
<meta http-equiv="content-script-type"
content="text/javascript" />
<meta http-equiv="content-style-type"
content="text/css" />
<link rel="index" href="/" />
<link rev="made" href="mailto:hoge@example.com" />
</head>
<body>
<p>
IE6だとXML宣言消えているよ。
</p>
</body>
</html>
END_OF_HTML
my $t = $self->load_tmpl( \$tmpl_html );
return $t->output;
}
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/2453





![: Amazon.co.jp: プラスティック・メモリーズ 1【完全生産限定版】(イベントチケット優先販売申込券付) [Blu-ray]](/lists/_9/B00VWX66E8.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 2【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX66K2.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 3【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX6MV0.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 4【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX66IO.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 5【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX6Y0E.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 6【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX69D6.jpg)

コメントする