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送信を別ウインドで行わせたい場合に、以下操作を満たせるやり方はありますでしょうか。
・リンクを右クリック、マウスホイールクリック
・リンクを右クリックしての「新しいタブで開く」「新しいウインドで開く」選択
No.3ベストアンサー
- 回答日時:
No1、No2です。
>ようするに普通のリンクに対する操作感でユーザーに使ってもらい
>たいんです
通常はホイールクリックではリンクしないと思うので、すでに普通のリンクとは違う動作になっていませんか?
それは置いておいて…
それならいっそのこと、リンク側で制御しようと思わないで、開いた側で制御すればよいのではないでしょうか?
手元にIE6しかないので、それで確認した範囲だと…
リンクタグにターゲット指定をしておいて、
1)左クリックでリンクした場合
2)右クリックの「新しいウインドウで開く」で開いた場合
のどちらの場合も、javascriptで親ウィンドウの情報を取得できましたので、開いた側で元のformの内容を取得して、自分のフォーム(hidden)にセットして遷移しなおせば、お望みのことができるのではないでしょうか?
(少しだけ余計にロード時間がかかりますが)
ただし、2)の情報取得が、各ブラウザでみな同じように可能かどうかのテストまではしていません。
(通常リンクは問題ないと思いますが、右クリックの場合はよくわかりません)
No.4
- 回答日時:
> ・リンクを左クリック、マウスホイールクリック
> ・リンクを右クリックしての「新しいタブで開く」「新しいウインドで開く」選択時
>
> ようするに普通のリンクに対する操作感でユーザーに使ってもらいたいんです。
希望されている動作はブラウザ側のものなので、JavaScriptから操作できません。
そもそもここまで操作できたらセキュリティ上の脆弱性のように感じます。ユーザが期待していない動作をJavaScriptで出来てしまいますから。
また、リンクを開く操作はブラウザの設定を変更することで変更できます。
質問文にあるスクリプトではどのような操作をしても新しいタブを開く処理になりますが、ユーザがそれを望まない場合があることは考慮されているでしょうか?
一番スマートなのはPHP側でGETパラメータを拾うように修正してしまうことだと思います。
具体的には以下の2通りです。
- test.php でPOSTパラメータを拾う処理をGETパラメータを拾う処理に変更する
- GETパラメータを拾い、test.php にPOSTするゲートウェイを用意する
> じゃぁ20件表示してるページからPOSTで詳細情報含め送るしかないと考えてます。
ということですが、今JavaScriptでPOSTしている処理をPHPで肩代わりすれば実現できると思うのですが、どうでしょう?
No.2
- 回答日時:
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非対応の場合の対処方法は、思いつきませんが…
この回答への補足
今気づきましたが、
質問文の「右クリック」は「左クリック」の間違いです。。
実現したいことはこういうことですね。
・リンクを左クリック、マウスホイールクリック
・リンクを右クリックしての「新しいタブで開く」「新しいウインドで開く」選択時
ようするに普通のリンクに対する操作感でユーザーに使ってもらいたいんです。
連続でアドバイスありがとうございます。
>>やはり実現は難しいのでしょうかね・・。
>No1は、実現方法を書いたつもりでしたけど…??
妥協という意味ではなく本当の意味で解決策があるのかなぁって思ったことです。
1)右クリック押下の判定はできますが、
そこから更に「新しいウインド(タブ)を開く」を選んだという判定はできないと思います。
2)データが一定ではないので無理ですね。
3)これこそ妥協案だと思います。
実現できないのであればおっしゃるような対応をしておくべきと考えてます。
4)これも妥協案ですよね。
左クリックのみにしか対応させないというのも検討してみます。
No.1
- 回答日時:
1)右クリックでも同じように動作させるなら
oncontextmenuやイベント処理などで右クリックを取得して、同様の処理
(submit())をしてあげる。
2)POSTのデータが決まっているのなら
href="test.php?test=abcdefg"を設定しておいて、php側でgetでデータを
取る(決まっているデータなら、送る必要ないけど…)
3)あくまでPOSTなら
<a>タグはhref="test.php"としておいて、php側でデータが無い場合は
右クリックと判断して、その時用のページを返す。
例えば「右クリックしちゃいゃ~~ん!」
(またはデフォルトのページを決めておけばよい)
4)右クリックでのリンクが効かなくてよいのなら
トリガーをリンクタグでない他の要素にすれば、リンクの機能がなくなる
ので、右クリックではリンクしなくなる。
ところで、hiddenのデータがないとページが見られないとするなら、スクリプトが動作しない(させていない)ユーザは門前払いってことでいいのかな?
全体像が不明ですが、わざわざまわりくどいことをして、ユーザビリティを落とすようなことにならないように…
(単純なリンクだけでいけそうな気がするけど)
アドバイスありがとうございます。
やはり実現は難しいのでしょうかね・・。
ちなみに、hiddenで送信するものは、GETで送れないサイズなんです。
それで仕方なくPOSTにすることにしてます。
全体像の概略は、
とあるwebAPIから商品情報を取得して20件ずつ表示してます。
このページから商品個別のページへ遷移させたいのです。
一番の理想は、商品個別ページへは商品IDだけをGETで送り、
個別ページで改めてwebAPIから商品IDから情報取得→表示でした。
ただ、商品IDのようなユニークな項目が無いため、
それはできませんでした。
じゃぁ20件表示してるページからPOSTで詳細情報含め送るしかないと考えてます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
追加ボタンを押した際に ok ボ...
-
jsonテキストデータの並び替え...
-
初心者です。gulpでコンパイル...
-
jQueryで同じクラス名のものを...
-
食材の期限を管理するためにGAS...
-
前回の質問の続き function mov...
-
このプログラムに、王手をかけ...
-
前回の質問の続き function mou...
-
このプログラムに王様の逃げ道...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
-
<div>のタッチ状態を維持したま...
-
jQueryでシンセサイザーを作っ...
-
プログラミング 学習
-
HTMLでサブフレームから親のス...
-
ジャバスクリプトについて。
-
プログラムについて。
-
Q&A掲示板の入力フォームに文字...
-
メールフォームの日付入力フォ...
-
二次元配列を使って順位をだす...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WEBページのジャンプ。素早く行...
-
excel VBA でjava のボタンを押...
-
HTMLのリンクの色をクリックす...
-
画面のどこかをクリックすると
-
被リンクを無料で増やすための...
-
Webサイト内に埋め込んだmp4動...
-
ブラウザの戻るを押しても戻ら...
-
a:hoverで設定した内容をクリッ...
-
スマホでボタンがhoverの状態か...
-
Strutsでページネーションを実...
-
携帯で javascript:history.ba...
-
ページ内リンクでアコーディオ...
-
リンク先を新しいタブで開けな...
-
リロードした時にページの一番...
-
webbrowserの読込完了が反応しない
-
C++で作成したDLLを vb.net か...
-
ページ内リンククリックでアコ...
-
「外部リンク」と「内部リンク...
-
フロントページのリンクボタン...
-
外部ページからスライダー内の...
おすすめ情報