• ベストアンサー

hrefでのリンクと、window.openの違いについて

質問させて頂きます。 現在、HTMLで画面を2つ作成しています。 内容として、1つ目のウインドウに入力した値を、 2つ目のウインドウにJavaScriptを利用して受け渡す、というものです。 実現するために色々調べていたところ、気になったことがあります。 なぜ、hrefで画面遷移する場合に、値の受け渡しはできないのでしょうか?(JavaScriptを用いて) window.openを利用すれば、JavaScriptを利用して値の受け渡しはできる、という情報を得られました。 親ウインドウと子ウインドウの関係であれば値を受け渡すことが可能であるのに、hrefでの値の受け渡しが不可能な理由は何なのか?何か特別な制約があるのか?と、気になっています。 もし、ご存じの方がいらっしゃいましたら、もしくは私が何か勘違いしているのであれば、ご指摘、ご教授宜しくお願い致します。

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

  • ベストアンサー
回答No.3

> なぜ、hrefで画面遷移する場合に、値の受け渡しはできないのでしょうか?(JavaScriptを用いて) できますよ。 JavaScriptだけでできることを、HTMLという別の規格を併用するというのはあまり使われないというだけでしょう。 (formの送信など、JavaScriptだけでは難しい、または不可能なものの場合はHTMLを併用する事があります) index.shtml <body> メッセージを表示: <!--#if expr="$QUERY_STRING= /msg=([^&]+)/" --> <!--#set var="msg" value="$1"--> <!--#echo var="msg" --> <!--#endif --> <hr> <a href="index.shtml?msg=HTML" target="_blank" >html</a> <a href="index.shtml" target="_blank" onclick="send(this, 'JavaScript');">javascript</a> <a href="index.shtml" target="_blank" onclick="send(this, 'Hello');">hello</a> <script> function send(anc, message){ anc.href+='?msg='+message; } </script> </body> セキュリティー的にはwindow.open()でもhrefの書き換えでも変わりません。 アドレス欄に送信データ(URLの?以降)が表示されるのを避けるなら、targetをインラインフレームにしたり、 <form method="POST">かAjaxが無難だと思います。

yukke33
質問者

お礼

ありがとうございます。 サンプルコードまで書いて頂けるとは思っていませんでした。 お礼が遅くなってしまい申し訳ありません。

その他の回答 (2)

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.2

何か特別な制約があるのでは無く、実現するには特別な仕組みが必要だからでしょう。 URL1 の HTML 中に <a href="URL2">URL2</a> があったとします。 URL1 を開いていた閲覧者がこれをクリックすると画面が URL2 のものに切り替わる訳ですが、その際にはHTML だけでは無く CSS も JavaScript のコードも変数も全て完全に切り替わるのが自然だと思いませんか? なぜ? と思うなら、それは人様のページから自分のページに遷移した場合を考えていないからでしょう。 つまり、JavaScript にしろ CSS にしろ以前のページから内容を引き継ぐ為には「連携が意図されたページであるかどうか」の判定が必要になります。 この判定を犯罪者に悪用されない確度で行うのは、特別な仕組みだと思いませんか?

yukke33
質問者

お礼

確かに! 言われてみて気付きました。 ありがとうございます。

  • OKbokuzyo
  • ベストアンサー率43% (130/296)
回答No.1

htmlを規定しているのは(現在は)W3Cであり、 JavaScriptはEcma Internationalが策定しているECMAScriptを基本としているからです。 ※ 厳密にはwindowオブジェクトはブラウザ固有のオブジェクト(ECMAScript外で規定されたオブジェクト)です。 つまり、htmlとJavaScriptは生まれも育ちも全く違うわけです。 強いて質問に答えるならhref属性というのはそういう仕様になっていないからです。 htmlにしてみれば、JavaScriptなんて知ったこっちゃないわけですから windowオブジェクトに親とか子という関係を持たせるという仕様になっていないわけです。

yukke33
質問者

お礼

やはり別モノである、ということを認識するべきなんですね。 勉強になりました。ありがとうございます。

関連するQ&A