既知の話題でしたらすみません。
XCLやJP版X2で作成されたサイトをFirefoxで閲覧している際に不便に感じていることが、「戻る」「進む」でページ移動を行うとスクロールバーの位置が最上部に戻されてしまうことです。
(IEやSafari、Operaではそのような現象は発生しない)
調べた限りではものすごく昔(3年前)のもので
同様の投稿を見つけましたが、解決には至らなかったようです。
自分なりに追っていったところ、互換レンダーシステムのsendHeader(X2であればfooter.php)内で"cache-control: no-store"がセットされている部分が怪しいと分かり、UAがFirefoxの場合には"no-store"をセットしない、といった処理に変更してみたところ、見事にスクロールバーの位置が保持されるようになりました。
Mozillaのドキュメント(1.5のものですが)を見ると、"cache-control: no-store"がセットされているとbfcache(メモリ内キャッシュシステム?)が適用されないとの記述があり、これが原因ではないかと思われます。
と、ここまでは分かったのですが、"no-store"を削除してしまうのは副作用も大きそうな気がしており、他に「こんなんしたらいいんちゃう?」という代案がお分かりの方がいれば、アドバイスやアイデアだけでもいただければと思い投稿した次第です。
よろしくお願いします。
環境: Firefox 2.0.0.13(Windows版)
wahyuさん、こんにちは。
引用:
調べた限りではものすごく昔(3年前)のもので同様の投稿を見つけましたが、解決には至らなかったようです。
この時はテーマが変わったせいだと思っていたのですが、firefox側の問題だったのかもしれませんね。
引用:
自分なりに追っていったところ、互換レンダーシステムのsendHeader(X2であればfooter.php)内で"cache-control: no-store"がセットされている部分が怪しいと分かり、UAがFirefoxの場合には"no-store"をセットしない、といった処理に変更してみたところ、見事にスクロールバーの位置が保持されるようになりました。
なるほど~。
スクロール位置が戻されないのは、大きなメリットですね。
であれば、no-store で悪影響が出るかどうかを確認する、という方向はどうでしょう?
キャッシュ関連で問題があるとすればほぼ一点。
「ログイン中に、権限を要するページを見る」
「ログアウトする」
「ログアウト後にも、そのページが表示されてしまう」
UAがfirefoxの時のみ、という条件であれば、テストも簡単でしょう。
このケースではUA偽装の対策を考える必要はありませんから。
GIJOEさん、返信ありがとうございます
引用:
この時はテーマが変わったせいだと思っていたのですが、firefox側の問題だったのかもしれませんね。
アーカイブを眺めていたところ、X2の2.0.11 JP RC1がリリースされた際に、それまでなかったno-storeをHTTPヘッダへ追加する変更が行われたみたいです。
引用:
とりあえずこのサイトについて、no-storeを外してみました。(UAに関わらず)
おおー、XUGJで試験導入していただけるとは!

ローカルで試してみてはいたのですが、やはり一人の目では限りがあるのでとても有難いです。
以下、とりあえずFirefoxとIEについてだけですが、私が試行してみた結果です。とりあえず問題がなかったIEから。
・IE 7
no-cacheの方が反映されているためだと思うのですが、no-store有効時と同じ動作で問題ありません。
ログアウト後に、ログアウト前に表示していた権限が必要なページに戻っても、正しくログアウトが反映されて権限エラーが表示されます。
・Firefox 2
こちらはやはり影響が出てしまいました。
ログアウト後に、ログアウト前に表示していた権限が必要なページに「戻る」で移動すると、ログアウトが反映されずログイン時の状態で表示されてしまいます。
(「戻る」ではなく、アドレスバーやリンクなどから移動した場合には正しくログアウトが反映されます。)
これだと共有のPCなどではまったく問題がないとは言い切れないので、オートログインなどと一緒で、安全性と利便性を吟味してから採用するべき改造、ということなんでしょうかね。
(ブラウザを閉じさえすればいいので、オートログインよりはリスクが低いと個人的には感じていますが)
参考までに大規模なサイトではどういう運用なのかと試しにYahoo!で検証してみましたが、やはりno-storeをオフにしているようで同じ動作でした(ログアウト後も「戻る」でログイン時の状態が表示される)。
追記: 書き込みは特にリロードしなくても反映されました。Firefoxのbfcacheで影響が出るのはあくまで「戻る」「進む」で移動した場合のみのようです。
wahyuさん、こんにちは。
なかなか面白い話題になってきましたね。
引用:
アーカイブを眺めていたところ、X2の2.0.11 JP RC1がリリースされた際に、それまでなかったno-storeをHTTPヘッダへ追加する変更が行われたみたいです。
おお~、なるほど。確かにその通りですね。
ちょうどそのタイミングは忙しくてアーカイブを追ってない時期だったので、そういう重要なコア部の変更を見逃していたみたいです。
2.0.1 では、no-store だったのが、2.0.2~2.0.5の間に no-cache だけになって、それがまた2.0.11JPから復活したみたいですね。
本家版はバージョンを重ねてもno-cacheのみ。当然、impresscms もno-cacheのみです。
引用:
ログアウト後に、ログアウト前に表示していた権限が必要なページに「戻る」で移動すると、ログアウトが反映されずログイン時の状態で表示されてしまいます。
(「戻る」ではなく、アドレスバーやリンクなどから移動した場合には正しくログアウトが反映されます。)
これだと共有のPCなどではまったく問題がないとは言い切れないので、オートログインなどと一緒で、安全性と利便性を吟味してから採用するべき改造、ということなんでしょうかね。
(ブラウザを閉じさえすればいいので、オートログインよりはリスクが低いと個人的には感じていますが)
私もこのリスクはサイト利用者が負うべきものだと考えますが、選択制になっていればベストですね。
引用:
参考までに大規模なサイトではどういう運用なのかと試しにYahoo!で検証してみましたが、やはりno-storeをオフにしているようで同じ動作でした(ログアウト後も「戻る」でログイン時の状態が表示される)。
その着眼点は素晴らしいですね。
確かに、こういう設定こそ大規模サイトの真似をすればいいんですよ。
こういう変更って、ヘタすると全ブラウザについてテストをしなきゃいけないわけですが、そんなの個人規模じゃどうすることもできません。
圧倒的なテスト数を誇る大規模サイトと同じ設定にするのが一番ですね。
私もYahoo!にIE6でログインしてみましたが、firefoxとHTTPレスポンスが違うってことはないですね。(少なくともキャッシュ関係は)
ということは、UAによる振り分けなしに、
Expires: -1
Pragma: no-cache
Cache-Control: no-cache
だけで良いんじゃないでしょうか。
さて実装ですが、X2ならHackしかありません。footer.php を直接書き換える。以上。
XCLでHackするなら、html/modules/leagacyRender/kernel/Legacy_RenderTarget.class.php。
XCLでHackを避けるなら、前後にデリゲートもなさそうだし、レンダラー差し替えしかないかなあ。
本当はレンダラーの一般設定に、「HTTPレスポンスヘッダー」という項目を追加するのが一番だと思うのですが、そういうFeatureRequestは、2.2以降の話でしょうねえ。