人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

IE8 javascript:location.href='...' のパス指定でエラー ( スマートなURLで )

Apache 2.2 ,PHP5.3 Codeigniter と、mod_rewrite を使用しています。
以下のようなjavascriptで飛び先を指定しています。

<input ... onclick="javascript:location.href='/controler/csv/?&name=あああ&date=20130720';">

こんなコードですが、IE7と8 で、画像のエラーが出ます。(IE9, FF , chrome などでは正常)

mod_rewrite と Codeigniterを使わずに、
<input ... onclick="javascript:location.href='method.php?&name=あああ&date=20130720';">
で飛び先をしてすると問題なくサイトを開くことができるですが。

mod_rewrite と Codeigniterは、どうしても使用しなければなりません。

location href ie8 エラー などでググっては見ましたが、自分では解決できないと
思いました。
どなたか知恵をください。お願いします。

1374334639
●拡大する

●質問者: gdwtseq
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● だわかき
●100ポイント

どのようなCodeigniterとmod_rewriteを書いているのか分かりませんけど、

/controler/csv/?&name=あああ&date=20130720

この部分の表記が RFC 1738 Uniform Resource Locators (URL) に未定義の書き方です。
ftp://ftp.isi.edu/in-notes/rfc1738.txt

?や&はファイル名の後に書かなくてはいけません。
またまた IE9, FF , chrome では動いているのでしょうが、他のブラウザでどのように動くかは保証されません。


gdwtseqさんのコメント
ありがとうございます。 わかりました。保証は無いということですね。

2 ● Lhankor_Mhy
●100ポイント ベストアンサー

そのご質問だとどうしても推測になってしまうので、ソースを見せてくれればなあ、と思います。

HTMLは読み込めるが画像がリンク切れ、ということなので相対パスで参照している画像ファイルが読み込めてないような気がします。
表示されていない画像を右クリックするなどして、どのようなパスで画像にリクエストが飛んでいるのか確認してみるというのはいかがでしょうか。
IE7,8の表示が異なるということなので、ひょっとするとBASE要素によるものかもしれません。



あと、だわかきさんの説明は間違っているような気がします。RFC違反じゃないと思いますが。


gdwtseqさんのコメント
ありがとうございます。 返信が遅れました。自分なりに検証していました。 説明が悪かったので、誤解されてしまいました。 実際のソースは、以下です。 >|php| <?php if ($show_button) { echo '<input type="button" value="CSVダウンロード" onclick="javascript:location.href=\'/syouhin/csv/?' .$query_string .'\';">'; } ...(以上) ||< $query_string には、&name=あああ&date=20130720 が代入されています。 このボタンは、押して、CSVファイルをダウンロードする為のものです。 href=\'/syouhin/csv/?' の部分を、href=\'/syouhin/csv.php?' に変えれば、IE7,8 でも正常にサイトアクセス、CSVダウンロードできるということです。(mod_rewriteとCodeigniter非使用) Apacheアクセスログを確認したところインターネット接続は届いています。(以下がそのログ) xxx.xxx.xxx.xxx - - [21/Jul/2013:12:27:33 +0900] "GET /syouhin/csv/?&name=urlencodeされた"あああ"&date=20130720 HTTP/1.1" 200 31541 IE9,FF,chrome の場合も、Apacheアクセスログは同じ結果です。 蛇足ですが、Codeigniterの場合ドキュメントルートには index.phpがあるだけで、 /syouhin/csv でアクセスした場合、syouhinクラスの csvメソッドを実行します。 今回、自分なりに調査しました。 Codeigniterでもデバッグログと取りましたが、IE9,FF,chromeでも、IE7,8でも、GETクエリー /?&name=あああ&date=20130720 を取得できています。 そして、パス+パラメータ指定方法を、CodeigniterのURI方式に修正(下記)、 >|html| <input type="button" value="CSVダウンロード" onclick="javascript:location.href=\'/syouhin/csv/urlencodeした"あああ"/20130720';"> ||< アクセス実行してみました。 結局、同じく、添付画像のエラーが出ます。 その内容は「www.mydomain.jp - 20130720 をダウンロードできません。 このインターネットのサイトを開くことができません。…直してください。」 です。 20130720 というサイトにアクセスしている風です。 IE7,8 側が、最終的にサーバーからのレスポンスを受け取れていないのでは?と想像してます。 BASE要素は、勉強不足で理解していませんので、これから勉強します。

Lhankor_Mhyさんのコメント
あ、そういうことでしたか。失礼しました。 どうも、URLの拡張子の影響を受けてるように感じます。CodeigniterでURLサフィックスをしてみるというのはどうでしょうか。 ちなみにレスポンスヘッダのContent-TypeやContent-Dispositionは正しく設定されていますでしょうか?

gdwtseqさんのコメント
ありがとうございます。 Codeigniterの ['url_suffix'] = '.html' にして、 site_url('syouhin/csv/'.$query_string) で以下のようなパスしてにしました >|html| <input ... onclick="javascript:location.href='https://www.mydomain.jp/index.php/syouhin/csv/urlencodeした"あああ"/20130720.html';"> ||< しかし同じく画像のエラーダイアログで、 「www.mydomain.jp - 20130720.html をダウンロードできません。 …直してください。」 となります。 PHPによるレスポンスヘッダーは、以下を送出しています。 >|php| header("Cache-Control: public"); header("Pragma: public"); header('Content-Type: application/vnd.x-excel; charset=Shift_JIS'); header('Content-Disposition: attachment; filename="pref_' . date('YmdHis') . '.csv"'); ||< 取り急ぎの返信でした。

質問者から

皆様

対策しましたので取り急ぎ報告します。
試行錯誤した末、location.href='..スマートURL..' を諦め、

<a href="/syouhin/csv/?.... 

で回避することにしました。

また、IE8 には、レスポンスヘッダー"Cache-Control: public" と "Pragma: public" は、必要と思われます(釈迦に説法ですかね)。

Lhankor_Mhyさんには、とても有意義な情報を頂きましたし勉強になりました。


今回は、これで閉めさせていただきたいと思います。
本当にありがとうございました。


関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ