EC-CUBE 2.3.4 での話。
IE6で管理系の帳票を表示させようとすると、
とエラーが出て、PDFを開けません。
テンプレートファイル /data/Smarty/templates/default/admin/order/pdf_input.tpl を見ると、
<script type="text/javascript"> <!-- self.moveTo(20,20);self.focus(); function lfPopwinSubmit(formName) { win02('about:blank','pdf','1000','900'); document[formName].target = "pdf"; document[formName].submit(); return false; } //--> </script>となっていて、 about:blank あたりが、「ん?」と思う実装です。
しかしこれはこれで理由はあるみたいで、EC-CUBE開発Wiki – [EC-CUBE]IE6で帳票(PDF)が開けない にもいろいろ試した旨が書いてあります。
これの解決策としては、EC-CUBE 開発コミュニティサイトで挙げられているもので、/data/pdf/fpdf.php に対して、
header("Cache-Control: "); header("Pragma: ");を適宜追加するのが正しいです。
HTTPヘッダを確認しても、これまで
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-Length: 35706 Content-disposition: inline; filename="doc.pdf" Connection: close Content-Type: application/pdfと返ってきていたのが、
Cache-Control: Pragma: Content-Length: 35706 Content-disposition: inline; filename="doc.pdf" Connection: close Content-Type: application/pdfとなっているので、修正が正しく反映された事も分かります。
ところが、ところが、前述した pdf_input.tpl に記述してあるJavaScriptを、
<script type="text/javascript"> <!-- self.moveTo(20,20);self.focus(); function lfPopwinSubmit(formName) { win02('about:blank','pdf','1000','900'); document[formName].target = "pdf"; document[formName].submit(); return false; } //--> //--> </script>のように、最後のHTMLコメント部分を二重化すると、HTTPヘッダの修正を行わなくても、IE6でPDFが表示出来ました…え?
ヘッダの修正は行っていないので、確認するともちろん、
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cacheのままです。なんだこれは・・・
全くもって謎です。とりあえずIE7, IE8, Firefox でもそのままで問題ありませんでしたが、なぜこれで動くのか、よく分かりません…。 気持ち悪いので、実際の対処はHTTPヘッダ修正を適用しましたが、HTMLコメントの二重化(しかも片手落ち)で動作した事が不思議でなりません。
いまのところその理由までは突き止められてませんが、IE6のバグでしょうか。似たようなものは、「HTMLコメントがあるだけで、floatボックス内のテキストが複製されたように二重にレンダリングされる」をはじめとして、IE6バグは数え切れないくらいあります。
そんなIE6がいまだにシェアが大きいのは、悩ましいところです…
オープンソースECサイト構築ソフトEC‐CUBE(Ver2.4.0対応)公式ガイドブック カスタマイズ編 | |
福田 博一 秀和システム 2009-07 売り上げランキング : 9060 おすすめ平均 評価は分かれているようですが… この内容にしては少々割高感が・・・ コピーしてくださいは笑える。 Amazonで詳しく見る by G-Tools |