プロが教えるわが家の防犯対策術!

POST送信を別ウインド(タブ)で行いたかったので、
以下のようにしました。

<form action="test.php" name="form1" method="post" target="tar1" onsubmit="window.open('','tar1')">
<input type="hidden" name="test" value="abcdefg">
</form>

<a href="" onclick="document.form1.submit();return false">POST送信</a>

右クリック、マウスホイールクリックした場合に、
IE8の場合は新ウインドが開き、FireFoxの場合は新タブで開くようになりました。
この挙動の差については特に問題ありません。
(現在の画面と別画面で行えればいいので)

問題は、リンクを右クリックしての「新しいタブで開く」「新しいウインドで開く」を選んだ場合です。
この場合では、「<a href="" 」の部分をリンクとして認識してしまうようで、
同じページが表示されてしまいます。
かといって、href="test.php"としておいてもPOSTデータが無しになってしまいます。

POST送信を別ウインドで行わせたい場合に、以下操作を満たせるやり方はありますでしょうか。
・リンクを右クリック、マウスホイールクリック
・リンクを右クリックしての「新しいタブで開く」「新しいウインドで開く」選択

A 回答 (4件)

No1、No2です。



>ようするに普通のリンクに対する操作感でユーザーに使ってもらい
>たいんです
通常はホイールクリックではリンクしないと思うので、すでに普通のリンクとは違う動作になっていませんか?
それは置いておいて…

それならいっそのこと、リンク側で制御しようと思わないで、開いた側で制御すればよいのではないでしょうか?
手元にIE6しかないので、それで確認した範囲だと…

リンクタグにターゲット指定をしておいて、
 1)左クリックでリンクした場合
 2)右クリックの「新しいウインドウで開く」で開いた場合
のどちらの場合も、javascriptで親ウィンドウの情報を取得できましたので、開いた側で元のformの内容を取得して、自分のフォーム(hidden)にセットして遷移しなおせば、お望みのことができるのではないでしょうか?
(少しだけ余計にロード時間がかかりますが)

ただし、2)の情報取得が、各ブラウザでみな同じように可能かどうかのテストまではしていません。
(通常リンクは問題ないと思いますが、右クリックの場合はよくわかりません)
    • good
    • 0

> ・リンクを左クリック、マウスホイールクリック


> ・リンクを右クリックしての「新しいタブで開く」「新しいウインドで開く」選択時
>
> ようするに普通のリンクに対する操作感でユーザーに使ってもらいたいんです。
希望されている動作はブラウザ側のものなので、JavaScriptから操作できません。

そもそもここまで操作できたらセキュリティ上の脆弱性のように感じます。ユーザが期待していない動作をJavaScriptで出来てしまいますから。
また、リンクを開く操作はブラウザの設定を変更することで変更できます。
質問文にあるスクリプトではどのような操作をしても新しいタブを開く処理になりますが、ユーザがそれを望まない場合があることは考慮されているでしょうか?

一番スマートなのはPHP側でGETパラメータを拾うように修正してしまうことだと思います。
具体的には以下の2通りです。

- test.php でPOSTパラメータを拾う処理をGETパラメータを拾う処理に変更する
- GETパラメータを拾い、test.php にPOSTするゲートウェイを用意する

> じゃぁ20件表示してるページからPOSTで詳細情報含め送るしかないと考えてます。
ということですが、今JavaScriptでPOSTしている処理をPHPで肩代わりすれば実現できると思うのですが、どうでしょう?
    • good
    • 0
この回答へのお礼

javascript必須のサイトということもあり、
左クリックのみ受け付けることで対応しました。
回答ありがとうございます。

お礼日時:2009/10/06 11:05

No1です。



>やはり実現は難しいのでしょうかね・・。
No1は、実現方法を書いたつもりでしたけど…??

1)なら以下が参考になるかと
 (クロスブラウザ対応がどこまで出来ているかは確認していません)
http://www5e.biglobe.ne.jp/~access_r/hp/javascri …
http://www.red.oit-net.jp/tatsuya/java/event.htm
http://phpspot.org/blog/archives/2007/02/javascr …
http://javascript.eweb-design.com/0901_rc.html
(検索すれば、他にも沢山見つかるはずです)

2)はデータが一定では無いのと、getでは無理とのことなので、使えなさそう。

3)はphpの修正が可能なのかどうか不明ですが、
 例えば、「詳細情報」が無い場合は、別ウインドウのサイズを小さくして
 (しなくてもいいけど)、「右クリックでは、正しい情報が送れません」などと
 表示しておいて、数秒後にウインドウを閉じてしまう。(アラート的に使う)
 みたいにしておけば元の状態に戻るので、左クリックをしてもらえる。

4)なら、リンクではなくなるので、左クリックのみでリンクするようになる。

よくわかってないけど、↑のどれかでいけませんか?
javascript非対応の場合の対処方法は、思いつきませんが…

この回答への補足

今気づきましたが、
質問文の「右クリック」は「左クリック」の間違いです。。

実現したいことはこういうことですね。

・リンクを左クリック、マウスホイールクリック
・リンクを右クリックしての「新しいタブで開く」「新しいウインドで開く」選択時

ようするに普通のリンクに対する操作感でユーザーに使ってもらいたいんです。

補足日時:2009/06/19 22:14
    • good
    • 0
この回答へのお礼

連続でアドバイスありがとうございます。

>>やはり実現は難しいのでしょうかね・・。
>No1は、実現方法を書いたつもりでしたけど…??

妥協という意味ではなく本当の意味で解決策があるのかなぁって思ったことです。

1)右クリック押下の判定はできますが、
そこから更に「新しいウインド(タブ)を開く」を選んだという判定はできないと思います。

2)データが一定ではないので無理ですね。

3)これこそ妥協案だと思います。
実現できないのであればおっしゃるような対応をしておくべきと考えてます。

4)これも妥協案ですよね。
左クリックのみにしか対応させないというのも検討してみます。

お礼日時:2009/06/19 22:12

1)右クリックでも同じように動作させるなら


 oncontextmenuやイベント処理などで右クリックを取得して、同様の処理
 (submit())をしてあげる。

2)POSTのデータが決まっているのなら
 href="test.php?test=abcdefg"を設定しておいて、php側でgetでデータを
 取る(決まっているデータなら、送る必要ないけど…)

3)あくまでPOSTなら
 <a>タグはhref="test.php"としておいて、php側でデータが無い場合は
 右クリックと判断して、その時用のページを返す。
 例えば「右クリックしちゃいゃ~~ん!」
 (またはデフォルトのページを決めておけばよい)

4)右クリックでのリンクが効かなくてよいのなら
 トリガーをリンクタグでない他の要素にすれば、リンクの機能がなくなる
 ので、右クリックではリンクしなくなる。

ところで、hiddenのデータがないとページが見られないとするなら、スクリプトが動作しない(させていない)ユーザは門前払いってことでいいのかな?
全体像が不明ですが、わざわざまわりくどいことをして、ユーザビリティを落とすようなことにならないように…
(単純なリンクだけでいけそうな気がするけど)
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
やはり実現は難しいのでしょうかね・・。

ちなみに、hiddenで送信するものは、GETで送れないサイズなんです。
それで仕方なくPOSTにすることにしてます。

全体像の概略は、
とあるwebAPIから商品情報を取得して20件ずつ表示してます。
このページから商品個別のページへ遷移させたいのです。
一番の理想は、商品個別ページへは商品IDだけをGETで送り、
個別ページで改めてwebAPIから商品IDから情報取得→表示でした。
ただ、商品IDのようなユニークな項目が無いため、
それはできませんでした。
じゃぁ20件表示してるページからPOSTで詳細情報含め送るしかないと考えてます。

お礼日時:2009/06/19 17:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!