fbpx

メニュー

Opera9.50はなぜnoscriptを出力してしまうのだ

高橋文樹 高橋文樹

この投稿は 16年 前に公開されました。いまではもう無効になった内容を含んでいるかもしれないことをご了承ください。

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タグとして評価はされないようです。今回の発見はそれだけ。

すべての投稿を見る

高橋文樹ニュースレター

高橋文樹が最近の活動報告、サイトでパブリックにできない情報などをお伝えするメーリングリストです。 滅多に送りませんので、ぜひご登録お願いいたします。 お得なダウンロードコンテンツなども計画中です。