BJ Lazy Load 等の Lazy Load 系プラグインって、画像を base64 エンコードしてるんですね。
今回の件でいくつか似たプラグイン試したんですがどれも同じ所でひっかかってたのできっと基本構造がそういう感じなんでしょうね。
で、SSL環境でつかってると、この base64 エンコーディングのせいで IE7 がセキュリティ警告出しまくるもんだから ((詳しくはわからないのですが、どうもIE7は SSL接続中でも base64 エンコーディングされたコンテンツを非SSLで取得してるものと認識してしまうらしく、安全でないコンテンツが混在してるという警告がでてしまうようです)) どうしたもんかと思い、フォーラム読んだり、プラグインの中身覗いたりしてようやくIE7だけ無効にする方法を見つけたのでメモです。
こんなかんじでやればいけます。
1 2 3 4 5 6 7 |
function is_ie_7() { $agent = getenv("HTTP_USER_AGENT"); return (strstr($agent, "MSIE 7.0")) ? true : false; } if (is_ie_7()){ add_filter( 'bj_lazy_load_run_filter', function(){ return false; }, 10, 1 ); } |
前半は UserAgent から IE7 判定を行う関数で、後半が BJ Lazy Load のフィルターを無効化する部分です。
UAによるブラウザ判定はちょいちょい見かけますね。今回はこちらを参考にさせてもらいました。
ユーザーエージェントでブラウザの判別をするPHPとかjQueryを書いてみた。 | Toro_Unit
後半部分はプラグインの中身を読んでみて、どうやら bj_lazy_load_run_filter ってとこでフィルターを掛けるかどうかを決めているっぽいってのを見つけたんで、IE7のときは強制的に false になるようなフィルターフックを書いてます。
今回はブラウザ判定と、無効化処理を別々にしてますが、まぁまとめちゃってもOKかもしれません。
ただ、IE7はちょいちょいトラブルがあるんで他の部分での切り分けにも使えると思いますので分けておいたほうがのちのち便利かもしれません。
他のIEも視野に入れる場合は、参考サイトのそれのようにIEのバージョンを返すような関数にして、戻り値で振り分けたほうがもっと便利ですね。
と、いうわけでこれでなんとかエラー地獄からは脱しました…が、当然読み込みはちょっと重くなりますね。LazyLoadオフったんで仕方ないですけどね。
コメントする