• ベストアンサー

window.openで別ウィドウを開くとひらいた先のURLがおかしくなるのは?

JavaScriptで遷移先のURLなどを指定していますが、 そこでボタンを押すと、新しい画面が開くようなしくみになっています。 (1)ボタンが表示されているウィンドウ (2)ボタンによって新しく開かれたウィンドウ ところが(2)はうまく表示されているのですが、 (1)はHTTP 404 - ファイル未検出 が表示されます。 何か問題があるのでしょうか?ちなみにPHPで作成しています。

質問者が選んだベストアンサー

  • ベストアンサー
noname#227796
noname#227796
回答No.2

PHPが問題だとすると解答はできない(現在かじり中)ので、他に原因となりそうな点を再度列挙します。 (1) やはりURLに問題がある。 http://~/hogehoge.php?引数 を直接window.openで指定してみると開けたりするかも。 その場合は、やはりパスの問題でしょう。 (2) 引数の渡し方&設定の問題 たまにあるのが、 http://~/hogehoge.php/引数 と、「?」ではなく「/」以降を引数にしている場合。 設定の問題で、「/」がパスの区切りと判断されていて、引数部分をページと解釈して、それを開こうとして404エラーが発生してる。 「hogehoge.php/」と来たときの「/」が「?」と同等になるように設定する必要がある。 <a href="http://~/hogehoge.php/引数">リンク</a> だと上手くいくが、 <a href="/hogehoge.php/引数">リンク</a> のように指定した場合に上手くいかない倍があったような気がしますので。 うろ覚えに付き、思いっきり間違えてるかも知れません。 (3) bodyタグにonload属性がある <body onload="何かを行うJavascript"> こんな感じでonloadしていて、その中で画面遷移させようとしている。 その画面遷移先のURLが存在しない可能性も考えられる。 (4) metaタグにrefreshが・・・ <META HTTP-EQUIV="refresh" CONTENT="0;URL=http://~/nothing.php"> などと、いきなり他のページに飛ばす処理が書いてある。 しかも、そのページが存在しないため、404エラーが発生。 (5) PHPが直接404を返してる PHP側で認証エラーがあった場合などに、意図的に404エラーを返している可能性はないでしょうか? ・認証失敗→そのパスへのアクセスはできない→パスが存在しないかのように装おう→404を返そう という仕様とか? その場合は、認証チェック周りで何かミスがあるのかも。 (6) アクセス制限されている 設定のやり方によっては、特定のクライアントやIPアドレスなどからアクセスがあった場合、(本当はアクセスできるURLなのに)404を返してアクセスできないかの装うことができます。 (5)と同じような意図です。 (7) 実際には404エラーではない。 404以外のエラーが発生したときに、404を返すように設定が(サーバの方で)変えてある。 このくらいでしょうか・・・ これ以上はわたしにもわかりません。(何か忘れてるような気もしますが) 色々確認してみて下さい。

aiurai54
質問者

お礼

新しいウィンドウのformsに入れ込む形をとってましたが、 無理なやり方をしてました。。。 いろいろな手法を考えていただいてありがとう ございました!!

その他の回答 (1)

noname#227796
noname#227796
回答No.1

(1)であるか(2)であるかは全く関係ないと思いますよ。 404ということは、開くべきURL(というかサイト上のファイルやCGIなど)が見つからないということですから。 window.open("ウインドウに表示するURL","ウインドウの名前","ウインドウのスタイル") と指定しますが、単にURLのところの指定が間違っているだけだと思います。 ソースがわからないので、推測に過ぎませんが。 ありがちなのが、存在しないURLになっていることですね。 相対パス・絶対パスの指定が間違っているとか、スペルミスとかで。 直接表示させるべきURLをブラウザで指定した場合にはどうなるか、確認してみましょう。 404になるなら、指定が間違っている可能性が高いです。

aiurai54
質問者

補足

すみません。 URLは間違っていませんでした。 (1)のウィンドウは他のウィンドウからhidden値で与えられたデータを持っています。 そのhidden値はユーザー認証などに用いるデータなので、できれば 新しいウィンドウにもhiddenで渡したいのですが、 新しいウィンドウには今のところGETでもらうようにしています。 (1)のウィンドウで(2)ウィンドウを開いた時点で、(1)のウィンドウのURLの 最後は[object]となってしまいます。 PHPのプログラムではmodeにより場合わけしていますが、 あたらしいウィンドウが表示された場合はdefaultに入るのでは ないのでしょうか? あたらしくreloadモードなどを作らなければいけないのでしょうか?? 説明しづらくてすみません。

関連するQ&A