OperaとはWebブラウザの一個で、出版社でいうところの早川書房のようなイメージ(?)であります。
基本的にはWeb標準に準拠していて、FirefoxやSafariとほとんど変わり無く動いてくれる優等生ですが、それゆえにぼくは普段ブラウザチェックに使わなかったりします。まあいいだろ、という感じで。
もちろん、仕事で他人のサイトを作成するときはちゃんと見ますよ。
で、普段は完全にスルーしていたのですが、先日破滅派をいじっているときにふと「久々にOperaで確認してみるか」と起動したところ、衝撃的なことが判明。なんと……<noscript>タグの中の文字が出力されてしまっている!
最近のflashはDreamweaverの機能であるように、Javascriptで書き込むという方法が主流でしたが、その補完的な機能であるnoscriptの内容が表示されてしまっています。Opera9.25だったときは無事だったのになぜ?
色々調べたんですが、よくわからなかったので、とりあえず、<noscript>タグを非表示にすることで回避。
解決 by Mootools
CSSでnoscriptを非表示にする方法も考えたんですが、それだとJavascriptオフの人に見てもらえないと思い、
Javascript周りの問題はJavascriptで解決。
で、MootoolsをはじめとするJavascriptライブラリには、ユーザエージェントを判別する機能が備わっています。
Moootoolsの場合はBrowser.Engine.presto950というそのものずばりのオブジェクトが用意されていて、ユーザエージェントがOpera9.50だった場合にtrueを返します。
これで条件分岐させて<noscript>を非表示に。こんな感じです。
if(Browser.Engine.presto950){ $$('header')[0].setStyle('display','none'); }
でも、なんでOperaはnoscriptを表示する仕様にしたんだろう? 理由が気になる……
追記:別にOperaのせいじゃなかった……
Operaに入っているDragonFlyというデバッグツールで検証したところ、単に自分が<noscript>に{display:block;}というスタイルを記入していただけでした。
そういえば、Javascript無効のユーザに向けて、こんなイメージを出力する予定だったんだっけ……
ようするに、Operaはスタイルシートで明示的に{display:none; }となっていない<noscript>の中身を出力してしまうんですね……。ただ、その中身はHTMLタグとして評価はされないようです。今回の発見はそれだけ。