- ベストアンサー
フレーム以外には表示させないようにするには
CGIからフレームを使ったHTMLページを出力するプログラムを作成しています。 ページは単純に ・左側にメニュー ・右側にメインページ という構成と考えていただければ良いです。 このとき、メニューから右クリック「新しいウインドウを開く」等を使って 別ウインドウで開く動作をされないように制御することは可能でしょうか? 実現方法を教えて下さい。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
> 確かJavaScriptを使用すれば現在のウィンドウにいくつの > フレームがあるのかを調べることが可能だったはずなので > もし、これが1だったらウィンドウを強制的に閉じるように > すれば良いかも知れません。 これは探してみました。 以下のようにしてみて下さい。 例 「a.html」 <html> <head> </head> <body> <script language="javascript"> <!-- if(window.document.forms.length == 0) { window.self.close(); } //--> </script> <a href="a.html" target="_blank">新規ウィンドウ</a><br> <a href="a.html" target="a">既存ウィンドウ</a> </body> </html> 「b.html」 <html> <head> </head> <frameset rows="*" border=0 frameborder=1> <frame src="a.html" name="a" scrolling=yes> </frameset> </head> </html> ただし、IE6.0SP2ではデフォルトで動作しないように なっているようです。(^_^; IEコンポーネントを使用しているプログラムからは 動作確認しました。 でも、クライアント側がJavaScriptを有効にしていない と効果がありませんのでご注意下さい。 (試していませんが自動で閉じるのではなくメッセージを 表示させるくらいならOKかも?) もしかすると危険なことやっている可能性もありますので もっと博識な方がいらっしゃればと思いますが・・・。 取り敢えず、もうかなり後ろの方に行っているので 一度質問を終了させ新たに質問し直した方がいいかも しれません。
その他の回答 (6)
- pick52
- ベストアンサー率35% (166/466)
もう一度質問をよく読んでみたら↓ではちょっと足り ませんね。 すみません。(_ _) 確かJavaScriptを使用すれば現在のウィンドウにいくつの フレームがあるのかを調べることが可能だったはずなので もし、これが1だったらウィンドウを強制的に閉じるように すれば良いかも知れません。 (ちょっと方法は忘れました) ただし、これもJavaScriptを使用しないようにしている 場合は効果ありませんし・・・。 同サイト内からの新規ウィンドウ禁止は各設定のこと などを考慮するといろいろ難しいです。 あとは、注意書きを書いておくくらいしか方法がありませんね。 それでも見ていないのかしてしまう人はいるのであまり 効果は期待できませんが・・・。 (それでも多少は効果ある?) リンクをアンカータグにせず、フォームボタンを使用 すれば新規ウィンドウで開くことを多少は押さえること が出来ると思いますがこれもよくタブブラウザなどに ついているナビゲートロックまたはシフトロックなどと 呼ばれている機能を使用されると効果ありませんね。 見た目も良くないですし。 いろいろ長く書いていますが書いている途中でふと 思いついた事も少し混ぜて書いています。 (つまり思いつきなので効果あるかどうかは分かりません) 一番いいのはFlashなどのHTMLの制約を一切受けない コンテンツにするかJavaScript(window.location.href) などで移動させることによって無効になっている環境 では使用できないようにするとか・・・。 どれも対象はWinのIE向けで他のOSや他のブラウザでの 動作は不明ですが。
- pick52
- ベストアンサー率35% (166/466)
↓あと、ホスト名の取得に対応していないサーバ上でも 動作しません。 リファラも使用しているのでリファラを意図的に変更されて いても動作しないのでそんなに効果ないですが・・・。 他にもリファラが同サイト内なら新規ウィンドウで開いた 場合も開いてしまうなど問題は多いです。(^_^; (まだ、気が付いていない問題があるかも?)
お礼
ありがとうございます。 ソースを見ただけですが、なんとなく意図は理解できました。 ある程度の制御の手助けにはなりそうです。
- pick52
- ベストアンサー率35% (166/466)
既に、解決しているかもしれませんがCookieとRedirectを 利用すれば以下のようなことが出来ます。 ただし、Cookieを無効にしている環境やCookie/Redirectに 対応していないブラウザでは正常動作しません。 http://www.geocities.jp/customcgi/ftest.cgi.html
- RAPTsong
- ベストアンサー率42% (74/175)
私が#1で書いた理由によって、ページが勝手に利用者の操作に対する制限はできない、 ということをいいたかったのですが、お分かりいただけたでしょうか? もし、どうしても制限するとしたら、そのような制限を行なうユーザーエージェント (ブラウザなど)を用意し、利用者にそれを使ってもらう以外にありません。 FlashやJavaなどといった技術により、そのような処理は可能ですが、CGIなど、 通常のHTML文書として動作する場合、対応できません。 「とにかく達成感を得たい」というのであれば、JavaScriptによる対応が楽しいかもしれません。 例えば、フレームの名前が下記のようになっていて、 +-----------+ | menu | body | +-----------+ "body"を単独で開かせたくない場合、下記のようなスクリプトをヘッダに記述することで、 回避できるでしょう。 <script language="JavaScript" type="text/javascript"> <!-- if( self != top.body ){ self.location.href = "http://www.*****"; } // --> </script> ※当然ながら、JavaScriptが無効となっていた場合は動作しません。
お礼
#1で書いて頂いたとおり、不可能ということですね。 回答ありがとうございました。参考になりました。
- moon_night
- ベストアンサー率32% (598/1831)
Javascriptでonclickでwindow.openさせれば新しいウィンドウで開くは防げると思います。 もしくはFORMボタンにするとか。
お礼
ありがとうございます。
- RAPTsong
- ベストアンサー率42% (74/175)
結論から言うと、不可能です。 以下、想像してください。 ・ユーザーエージェントでフレームページを扱えないものは一体どうすればいいのでしょう? ・画面が狭くてフレームだと狭すぎて見えない人は? 技術的には、 ・リンクをコピーして、新しいブラウザでオープンされた場合は? ・リンクをSHIFT+クリックされた場合は? ・ブラウザによっては、リンクのドラッグ&ドロップやホイールクリックで新規ページで開けるものもあります。 対応としては、 ・フレームページにしない。→iframeやCSSによる擬似フレームページ化など。 ・あきらめる。
お礼
回答ありがとうございます。 > 結論から言うと、不可能です。 ありがとうございます。 > 以下、想像してください。 > ・ユーザーエージェントでフレームページを扱えないものは一体どうすればいいのでしょう? > ・画面が狭くてフレームだと狭すぎて見えない人は? これらは別問題だと考えています。そもそもフレームページが表示できない、または表示しても意味が無いということで。 > 技術的には、 > ・リンクをコピーして、新しいブラウザでオープンされた場合は? > ・リンクをSHIFT+クリックされた場合は? > ・ブラウザによっては、リンクのドラッグ&ドロップやホイールクリックで新規ページで開けるものもあります。 この辺を解決したいのです。 (フレームページからのリンク以外は遮断するような上手い方法、または付け焼刃でも実現可能な方法を。) > 対応としては、 > ・フレームページにしない。→iframeやCSSによる擬似フレームページ化など。 > ・あきらめる。 iframeはともかく、擬似フレームを生成すると考えた方が良いかもしれませんね。
お礼
お礼が遅くなりました。 ・JavaScriptの使用 ・擬似フレームの作成 の両方を検討してみたいと思います。JavaScriptはあまり使用したくない気もしますが・・・。 どうもありがとうございました!