jquery jQuery で作成した機能が Firefox の最新バージョンで機能しない

2013年7月7日

Firefox の最新バージョン(22.0)になってから、この PC では画像が大きく表示されぼやけて見えるようになった。

また、コードなどを記述する pre 要素にマウスオーバーすると幅が自動的に広がるようにする機能を jQuery で以下のように記述して実現していたが、マウスアウトする際に、今までは元の幅に自動的に戻っていたのに、戻らなくなった。(「jQueryで文字数により表示幅を変える」)

但し他のブラウザ(IE, Chrome, Safari)では問題がない。


jQuery(document).ready(function($) {
//シンタックスハイライト部分の幅の調整
var prettyprint_width = $(‘#contents pre.prettyprint’).width(); //シンタックスハイライト部分の幅
var expandWidth = 840; //拡大する際のシンタックスハイライト部分の幅の値
$(‘#contents pre.prettyprint’).hover(
function() {
var prettyprint_comparison_width = 590; //比較の基準とする幅(*)
var that = $(this);
var li$ = that.find(‘li’); //’li’要素のラップ集合
var maxWidth = 0; //各行の幅の最大値を初期化
li$.each(function() { //各行に含まれる’span’要素の幅を合計し、その最大値を取得する
var spanWidth = 0; //各’span’要素の幅の合計値を初期化
$(this).find(‘span’).each(function() {
spanWidth += $(this).width();
});
maxWidth = Math.max(maxWidth, spanWidth);
});
if(prettyprint_comparison_width < maxWidth) { //各行の幅の最大値が比較の基準とする幅の値より大きければexpandWidth(840)まで拡大 that.not(":animated").css({whiteSpace: 'pre-wrap', position: 'relative', zIndex: 10}).animate({width: expandWidth}, 100); }else{ return; } }, function() { if($(this).width() == expandWidth) { //シンタックスハイライト部分の幅が拡大されていれば元に戻す $(this).css({whiteSpace: 'pre'}).animate({width: prettyprint_width}, 100); } }); }); [/code] 上記の最後の方の「 if($(this).width() == expandWidth) 」の条件を外すと、以前と同じように自動的に幅が元に戻るようになった。これはおそらく何らかの理由で要素の幅($(this).width())が変わってしまうためと考えられる。 Firefox のバグかと思って検索したところ次のサイトが見つかった。 22.0の表示が、大きくなって画像がぼやける。直せないでしょうか


(一部抜粋)
Windows 版の Firefox 22.0 は Windows(7 / 8)のスケーリング機能に従うようになったので、ユーザーが施している Windows 側の設定との組み合わせによっては、おっしゃるような問題が起こるケースはあるかもしれません。

・・・

一方、セーフモードでも問題が起こるのなら、Windows 版 Firefox 22.0 のスケーリング機能に的を絞って、影響しそうな次の設定を切り替えた上で、テストしてみると何かわかるかもしれません。

(1)ローケーションバー(URLを入力するところ)に about:config と入力して [Enter] キー押下。
(2)警告文をよく読み、[細心の注意を払って使用する] ボタンを押下。
(3)開いた画面の [検索] 欄に layout.css.devPixelsPerPx と入力。
(4)下欄に、同名の設定項目が表示される。初期値は -1.0 。
(5)この設定名をダブルクリックするか [右クリック] -> [値を変更] で設定ダイアログを開く。
(6)入力欄に 1.0 と入れて(あるいはマイナス記号を削除して) [OK] で閉じる。(変更すると項目行が太字になる)
(7)about:config のタブを閉じ、念のため Firefox を再起動。

layout.css.devPixelsPerPx は、CSS で指定されるピクセル値とモニタ上で表現される画素の関係を規定する設定値だったと記憶していますが、この値は、Firefox 21.0 までは 1.0 で「1.0 倍」という意味だったと思います。
22.0 ではこれが -1.0 に変わっています。このマイナス記号の付加は、おそらく「自動」化を意味していると思われます。つまり、Windows 側の設定に自動的に追従するというようなことではないでしょうか。
これを、21.0 相当の値に戻して動作を確認してみることで、この設定の影響があるかどうかを切り分けれられると思います。

layout.css.devPixelsPerPx の値を「1.0」に変更したところ、jQuery を元に戻しても機能することが確認できた。