この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2015年5月)

2015年5月8日

Bug-org 1128787 Firefox 35.0.1 crash repro (null ptr) 初回投稿日時: 2015年05月08日19時06分11秒
カテゴリ: Mozilla Core Mozilla40 バグ修正
固定リンク: id=2015050800
SNS: (list)

再現条件の理屈がはっきりとは分からなかったクラッシュバグです。loadイベントが発生する前に<input>要素にフォーカスをセットしておき、type属性値をtextに変更した後、loadイベントハンドラで、designModeonにするとクラッシュしていました。

Geckoでは、designMode内の要素は原則としてフォーカスを持つことができません(プラグインはその限りではありませんでしたが)。ですが、designModeonになる際に、フォーカスを持った要素をリセットしていませんでした。つまり、designModeに入ったことで、本来ならフォーカスを持てない要素が、フォーカスを持ち続けることができたわけです。

<input type="text">は、独立して選択範囲を管理する特殊な要素です。そのため、IMEContentObserverがフォーカスを持った要素からselection controllerを探す際に、本来ならdocumentのものが発見されるべきところで、予期せず、<input type="text">のものが発見され、他のフォーカスを元に取得していない情報と齟齬が生じてクラッシュしていました。

この修正により、designModeが有効になる際には、まず、HTMLエディタ用のUAスタイルシートを最初に追加し、これも含めた最新の情報をもとに、フォーカスを持っている要素がフォーカスを持ち続けられるのかを検査し、フォーカスを持つことができなくなっているのであれば、フォーカスを失わせるようにしました。

つまり、designModeonにすると、フォーカスを持っている要素で新たにblurイベントが発生する可能性があります。例えば、HTML5 Demo: ContentEditableのような奇妙なコードでは、designModeonになった途端にoffになるようになってしまっています。

Bug-org 1157083 It might be better to use CSS3 text-decoration for the UA stylesheet of <abbr> and <acronym> rather than border-bottom 初回投稿日時: 2015年05月08日19時23分29秒
カテゴリ: CSS HTML Mozilla Core Mozilla40 バグ修正
固定リンク: id=2015050801
SNS: (list)

<abbr>要素と、<acronym>要素は、GeckoとBlinkでは、CSSのborderを利用して、点線の下線を描画しています。しかし、メイリオのような、行間を広くとろうとするフォントでは、以下のスクリーンショットのように、下線が異様に離れた場所にレンダリングされていました。

古いabbr要素とacronym要素のレンダリング結果

今回の修正で、HTML5仕様のリファレンスにもあるように、CSS3のtext-decoration-styleを利用した下線を利用するようにしたので、フォントの指定している下線位置に下線が引かれるように変更されました。

新しいabbr要素とacronym要素のレンダリング結果

この変更により、例えば、以下のようなスタイルを指定しているサイトでは、下線が消えなくなります。

abbr[title], acronym[title] {
  border-bottom: none;
}

これは、以下のように修正する必要があります。

abbr[title], acronym[title] {
  border-bottom: none;
  text-decoration: none;
}

2015年5月18日

Firefox 38では、またまたTab Mix Plusでウインドウ右上の閉じるボタンが動かなくなるといったバグが出ているようです 初回投稿日時: 2015年05月18日11時02分41秒
最終更新日時: 2015年05月18日11時19分04秒
カテゴリ: Firefox Mozilla38
固定リンク: id=2015051800
SNS: (list)

Tab Mix Plusは多機能なアドオンで相変わらず人気があるようですが、そのメンテナンスのいい加減さには以前から定評があります。そして今回もやらかしているようです。Twitter上では、ウインドウ右上の閉じるボタンでウインドウが閉じられなくなったというツイートが毎日、多数投稿されています。

Firefoxのリリースサイクルについて、改めて解説しておきますと、Firefoxの開発は主にNightlyと呼ばれる、ガンガン色んな修正が投入される期間が6週間あり、これが次にFirefox Developer Edition (Aurora)に移行し、6週間、新しく出来てしまったバグの修正や重要なクラッシュバグの修正のみが行われます。さらにその後、より多くのテスタにテストしてもらい、Mozilla社内のQAチームが検証を行うためにBetaで6週間のテストが行われます。この時点で発見されたバグは、よほど重大なものでなければもはや修正はされません。そして、リリースされることになります。つまり、Aurora + Betaで12週間(約3ヵ月)、アドオンは最新版への追従を行う猶予が用意されています。

非常に開発が活発なアドオンだと、そもそもAuroraを待たずに、Nightlyの段階で問題が出次第、細かく修正が行われていきます。ですので、リリースされてもFirefox本体の変更に追従できていないアドオンは開発・メンテナンスがスムーズに行われてないと言えるでしょう。

そして、今回、Tab Mix Plusが一時的に使えなくなっていることから不満を訴えているユーザの中には、Tab Mix Plusでなくても実現できる機能変化のみが必要な人というのも、やはり居らっしゃいました。Tab Mix Plusユーザの方々には、リスクの少ない単機能アドオンで代替できないのか、これを機会に一度検証をすることをお勧めします

2015年5月20日

Firefox 38では、いくつかのアドオンが有効になっていると動作が遅くなるようです 初回投稿日時: 2015年05月20日13時47分02秒
最終更新日時: 2015年05月22日17時11分08秒
カテゴリ: Add-onトラブル Firefox Mozilla38
固定リンク: id=2015052000
SNS: (list)

Firefox 38にアップグレードしてから、「重くなった」と書かれている方が多かったので、可能な範囲で聞いてみたところ、やはり一部のアドオンが問題となっているようです。

Video DownloadHelper

やっさんさんは古くからMozillaのバグを報告してくれている方で、信頼できる情報です。

実際に、このように解決した方もいらっしゃいました。

Greasemonkey

未確認ですが、Amazonのサイトだけが遅いという情報の中で、Greasemonkeyが原因だったという話は見かけました。これで困っている方はお試しください。

Tab Mix Plus

これも未確認ですが、Tab Mix Plusを無効化することで解決したという方もいらっしゃいました。こちらもインストールさていて、パフォーマンス低下でお困りなら、無効にしてテストしてみてください。

全くアドオンをインストールしていない方で、38にアップグレードした途端に遅くなったというケースも一件、ありました。もし、全てのアドオンを無効化しても改善しない場合、セーフモードで起動して確認してみてください。

もし、セーフモードでのみ状況が改善するようでしたら、FirefoxのProfileリフレッシュを試してみた方が良いかと思います。ただし、リフレッシュするとアドオンを全てインストールし直しになりますので、以下の手順をお勧めします。

  1. Firefox Syncを利用して、アドオンも含めて各種データをクラウドにバックアップする
  2. Profileをリフレッシュする
  3. リフレッシュされた新しいProfileは、Firefox Syncからは新しいコンピュータに見えますので、別のコンピュータからFirefox Syncに接続する手順を利用し、データをクラウドから書き戻します

万が一、これにより、重要なデータが消えた場合は、リフレッシュ時にデスクトップに旧Profileがまるごとバックアップとして保存されていますので、これを新しいProfileに上書きしてください。

2015年5月24日

Firefoxが急に遅くなったという方はこの手順で原因を特定してみてください 初回投稿日時: 2015年05月24日11時10分47秒
最終更新日時: 2015年05月24日11時11分52秒
カテゴリ: Firefox
固定リンク: id=2015052400
SNS: (list)

Firefox本体のバグで遅くなっている可能性もありますが、だいたい、簡単に再現できるバグがリリース版に残っていることはほとんどないか、数日中にマイナーアップデートが出て修正されます。つまり、リリース版で分かりやすいバグが急に発生した場合、アドオンが原因である場合と、PC自体のハードウェア構成や、そのドライバの問題、もしくはセキュリティソフト等のシステム全体に関わるアプリに原因がある場合が多いです。

ここでは、そのような状況で原因をある程度まで特定する手順を紹介します。

  1. 最初は「セーフモード」を利用して再起動します。
    1. セーフモードで再現する場合、Profileが壊れている可能性がありますので、リフレッシュしてみることで解決するかもしれません。ただし、リフレッシュをそのまま行うとアドオンのインストール情報等、おそらくユーザにとって必要であろうものまで無くなってしまいます。そこで、Firefox Syncを利用してリフレッシュを行いましょう。
      1. まず、Firefox Syncをセットアップします。既にFirefox Syncを利用されている方は必要ありません。
      2. Firefox Syncのセットアップが終わったら、クラウドへのバックアップが開始されますので、気長に待ちましょう。10分から1時間程度で終わると思います。エラーが出る場合、クラウド側が一時的にダウンしていることが多いので、そのまま放置しておきましょう。メニューのパネル内に自分のアカウント名か書かれた項目がありますが、これをクリックして再度パネルを開いてもアイコンがアニメーションしていなければバックアップは完了しています。
      3. 次に、リフレッシュを行います。これが完了したら、まずはSyncでデータを完全に戻す前に再現するかどうかを確認してみてください。
      4. 最後に、Firefox Syncに接続し、データを書き戻します。ただし、一部の設定項目はSyncでは反映されないことに注意してください。例えば、端末ごとに異なる設定値を持つかもしれないようなもの(フォント設定等)はSyncでは保存されていません。
      5. 以上の手順でも解決しない場合、純粋にFirefoxのバグであるか、あなたのPC環境そのものに問題があるかのどちらかです。前者ならバグ報告があれば後々のバージョンで解決するかもしれませんが、自身でバグ報告できない場合は期待薄かもしれません。
      6. 万が一、何らかの問題があり、リフレッシュ前に戻したいという場合、デスクトップに元のProfileのデータが書き出されていますので、Firefoxを終了した状態で、そのフォルダの内容を全て、FirefoxのProfileフォルダに上書きコピーしてください。FirefoxのProfileフォルダの場所が分からない場合、FirefoxのUIから開くこともできます
  2. セーフモードで再現しなかった場合、次に、アドオン(拡張機能)が原因かどうかを特定します。
    1. Firefoxを通常モードで再起動します(普通に、一度終了し、再度、Firefoxを起動してください)。
    2. Firefoxのアドオンの管理画面を表示します。
    3. 左側のペインにある「拡張機能」を選択します。すると、その右側にインストールされているアドオンが全て列挙されます。
    4. 全てのアドオンの「無効化」ボタンをひとつずつクリックして無効にしていきます。全てのアドオンを無効化したら、Firefoxを再起動してください。
      1. 再起動後にも問題が発生する場合、その原因はテーマか、プラグインの可能性があります。
    5. 再起動して問題が無かった場合、次に、アドオンをひとつずつ有効化し、再起動を繰り返しましょう。これにより、問題のあるアドオンが特定できます。

問題の原因がアドオンにあり、そのアドオンが特定できた場合、そのアドオンの開発者のサイトには、addons.mozilla.orgによってレビュー前の開発版が存在することがあり、そちらでは問題が修正されているということもあります。

しかし、そもそも開発者のサイトが存在しない場合や、存在してもaddons.mozilla.orgのものが最新版ということもあります。この場合、その問題を解決するにはそのアドオンを無効化し続ける必要があります。しかし、それでは不便でしょうから、別のアドオンを探す方が良いでしょう。特に、Tab Mix Plusに代表される、統合型のアドオンは、必要な機能だけを追加してくれる、単機能型のアドオンを探してみると良いでしょう

最後にひとつお願いしておきたいことがあります。それは、同じ問題で困っている人のために、"Firefox XX で○○○という問題があったけど、□□□というアドオンを無効化すると解決した"という感じで、SNSやBlog等、何らかの形で他の人が参照できるようにしておいてください。

特に、Twitterで"Firefox"という単語と共にツイートしておいてもらえると、Army of Awesomeというシステムを利用してユーザに直接解決方法をアドバイスしているボランティアの人達にもその情報が伝わり、とても有益です。

また、Blogだと、常に検索エンジンで問題の解決策を探している人の検索対象となりますので、こちらも有益です。どのケースにしろ、困っているユーザは"Firefox"をキーワードに検索するので、略語や隠語を使って記述しないようにお願いします。

2015年5月27日

FirefoxからFlash Playerの保護モードを無効化する方法 (GUIから設定可能になっています) 初回投稿日時: 2015年05月27日10時51分11秒
カテゴリ: Firefox Flash Mozilla36 plugin Windows
固定リンク: id=2015052700
SNS: (list)

Firefox上でFlash Playerが実行されている場合にのみ、Flash Playerは保護モードというモードを実行し、これが原因で、Firefox上でのみ、Flash Playerのパフォーマンスが悪い、クラッシュが多い、一部のIMEで日本語が入力できない(Google日本語入力に関しては、Google日本語入力側の修正で解決しています)といった苦情が、相変わらず、多々寄せられ続けています。

これまでは、Flash Playerの設定ファイルを直接修正しないといけない(しかも管理者権限が必要)と、面倒だった保護モードの無効化ですが、Flash Player側での改善が一向に進まないため、Firefoxの画面上から簡単に変更が可能になっているので紹介しておきます。

  1. まず、ハンバーガーメニューボタンから、「アドオン」を選択します。

    メニューパネル上にある「アドオン」のスクリーンショット

  2. 次に、左側のペインで、「プラグイン」をクリックし、プラグインの一覧の中から、「Shockwave Flash」を探します。すると、その右側に「設定」ボタンがありますので、これをクリックします。

    プラグイン管理画面のスクリーンショット

  3. 最後に、「Adobe Flash の保護モードを有効化」のチェックを外し、Firefoxを再起動します

    「Shockwave Flash」の設定画面のスクリーンショット

改めて、Flash Playerの保護モードを無効化することのリスクを書いておきますが、確かに、セキュリティ上、保護モードが有効であるというのは、全てではないですが、存在している脆弱性からシステムに侵入されるということを防いでくれます。しかし、Flash Playerも高頻度で脆弱性を修正したアップデートを公開していますし、何より、他のブラウザ上では、そもそもこのモードは動作していません

ですので、Flash Playerの利用時に、パフォーマンスや、安定性に問題がある場合にまで、あえて有効にしておくメリットはほとんど無いと言えます(もちろん、Flash Player自体のアップデートは怠らないでください)。