- PR -

Strutsで右クリック、アドレスバー非表示制御

投稿者投稿内容
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2006-11-30 14:16
引用:

初心者マークさんの書き込み (2006-11-30 13:42) より:
お疲れ様です。説明いたします。

A画面=遷移元ーボタンが表示されているだけの画面
<html:action="/○○" method="POST">
B画面=遷移先ーFTPで別サーバから取得したファイル名の一覧が表示されている画面
C=B画面

B画面にはアドレスバー、メニューバー、コピペ禁止、右クリック禁止制御。

画面制御を含む前のStrutsの画面遷移はA画面→B画面のみです。
ただ、そのB画面に制御を入れたいだけなのですが、制御を設定するには
window.openでCを開きC画面の設定する方法しか見つからないのです。

本来ならばC画面は必要なく、B画面さえ制御が出来ればいいのです。。
この説明で理解できますでしょうか?


了解。

その制御をどちら側に持たせるかで話が変わってきます。
B画面がいじれるのであれば、B画面側のOnLoad()で呼び出してあげればよいと思います。
これが一番工数が低いでしょう。

もし、不可能な場合には、
C画面を仮に作成し、C画面で制御した上で、B画面に遷移します。
このさい、B画面に遷移する前に、親が面捕まえて、親画面を閉じると言うことが
できると思います。

C画面を作成しないのであれば、
A画面を無理やり小さくする様に制御してから、B画面に飛ばします。
C画面作ったほうが工数は低いでしょう。(あまり深い事、考えなくて済む為)

1.B画面で制御
A→B

2.B画面がいじれない−1
A→C→B

3.B画面がいじれない−2
______2のケース、かつ、C画面もつくれない場合(A画面だけで強引に制御)
A→B

イメージが湧きましたでしょうか?

その上で、A画面を閉じますか?
それとも、A画面は開いたままですか?

あと、struts-config.xmlは、リクエストパスに対して
ActionMappingです。

C画面を作成する場合は、子画面にパラメータを渡してやって、
擬似的にForm作って、送りつければ特に問題はおきません。

[ メッセージ編集済み 編集者: るぱん 編集日時 2006-11-30 14:21 ]
にぃにぃ
ベテラン
会議室デビュー日: 2006/10/19
投稿数: 70
投稿日時: 2006-12-01 09:58
最初やろうとしていた事は「A画面でonClickでwindow.openでB画面に遷移すると
同時にC画面でポップアップを開きB画面をCLOSEする」ですが、onclickで
window.openを使い制御を設定し、window.opener="_any"でB画面を警告ポップアップ
なしでcloseする。しかし、新しく出来たC画面が少しずれていたのです。ですが
それは解決しました。確認ですが、

制御ありの場合:
A画面(window.openでC画面生成)→B画面&C画面(B画面の削除)→D画面

制御なしの場合:
A画面→B画面→D画面

この制御ありのパターンで問題ないですよね。

るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2006-12-01 12:23
るぱんです。

D画面がどこから出てきたのか意味がまったくわかっておりませんが・・・。
C画面を出す意味が無いように思います。

選択肢を出したのは、
その選択をすることになった背景を固定するためですが、
新しく定義されてしまったので、はっきりと「その通りです」とは言えなくなってしまいました。

「B画面は絶対に手が入れられない」
これは有効ですか?

引用:

制御ありの場合:
A画面(window.openでC画面生成)→B画面&C画面(B画面の削除)→D画面

制御なしの場合:
A画面→B画面→D画面

この制御ありのパターンで問題ないですよね。


僕が言いたかったことはこれではなく、
C画面を立ち上げたと同時にA画面を閉じてからリクエストを発行し、
C画面からB画面へ遷移するということです。

推測していたのは、
A:画面サイズ(大)
B及びC:画面サイズ(小)

AからBへいきたいとのことだったので、
window.openを使うのは通常子画面の立ち上げだようなぁ・・・
ならば、こう言う想定か?
と邪推したのです。

まぁ、結果的にそれがずれていたので、
僕の頭の中に定義できていません。

なぜwindow.openを使いたいのかの理由は明示されていませんし、
なぜB画面に手を入れないのか・・・だとか、
そこらの理由が説明されていないのです。


[ メッセージ編集済み 編集者: るぱん 編集日時 2006-12-01 12:37 ]
にぃにぃ
ベテラン
会議室デビュー日: 2006/10/19
投稿数: 70
投稿日時: 2006-12-01 15:43
window.openを使いたいわけではなくてwindow.openでしかアドレスバーを非表示に
したり制御するためです。

他の手段でそういう制御ができるのならwindow.openはできるだけ使いたくありません。
その他の手段が今の所見つからないのです。

実はA画面→B画面→D画面→E画面・・・・と遷移は続きます。

ただ、B画面以降の画面にその制御をしたいのです。B画面さえ設定すれば
設定は引き継がれるみたいなので。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2006-12-01 15:56
引用:

初心者マークさんの書き込み (2006-12-01 15:43) より:
window.openを使いたいわけではなくてwindow.openでしかアドレスバーを非表示に
したり制御するためです。

他の手段でそういう制御ができるのならwindow.openはできるだけ使いたくありません。
その他の手段が今の所見つからないのです。

実はA画面→B画面→D画面→E画面・・・・と遷移は続きます。

ただ、B画面以降の画面にその制御をしたいのです。B画面さえ設定すれば
設定は引き継がれるみたいなので。




目的:A画面→B画面→D画面→E画面
暫定:A画面→C画面→B画面→D画面→E画面

A画面からC画面を出して、A画面を削除し、C画面からB画面へ遷移ならOKです。

引用:

A画面(window.openでC画面生成)→B画面&C画面(B画面の削除)→D画面


これで混乱しました。
にぃにぃ
ベテラン
会議室デビュー日: 2006/10/19
投稿数: 70
投稿日時: 2006-12-01 16:29
何度も混乱さしてしまい、申し訳ありません。

A画面からB画面はstruts-config.xmlの<action-path="/B" input="/A.jsp・・・"
<forward name="show" path="/B.jsp"/>としていてA画面でクライアントから
リクエストがあるとBに遷移します。
AのHTMLのonclickでwindow.open('B.do',"B","menubar=yes");が含まれた関数を
呼ぶ。そうするとC画面ができる。(B画面とC画面は制御有無以外は同じ)

B画面はブラウザ制御ができていない(アドレスバー等が表示されてしまう)ので、制御があるC画面を生かし、Bを閉じる。

という事です。分かりますか。
mandm
常連さん
会議室デビュー日: 2005/06/04
投稿数: 30
お住まい・勤務地: ニューヨーク
投稿日時: 2006-12-02 05:48
初心者マークさんの 要求は、Strutsとは関係なく
完全にJavascriptの世界です。JSPですらありません。

まず確認ですが、
>アドレスバー、メニューバー、コピペ禁止、右クリック禁止制御。

は、

アドレスバー無し、メニューバー無し、コピペ禁止、右クリック禁止制御。

という意味でよろしいですね。


それであれば、
画面A のサンプルHTML

<HTML>
<button onclick="openwinAndCloseMe();">ボタン</button>
<script language="JavaScript">
function openwinAndCloseMe(){
showModalDialog('B.do');//モーダルダイヤログとして B.doを POPUP
window.close();//もとの画面を閉じる。
}
</script>
</HTML>

では、どうでしょうか?(多分 IE限定ですが。)
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/methods/showmodaldialog.asp

でも、この場合 元画面(画面A)を閉じる瞬間にALERT画面がでる
かもしれません。で、やはり POPUPがいやな場合には、画面Aから遷移した
先の画面B の 中に以下の Javascriptをいれましょう。
(ただし、確実に ソースを隠したり、データのコピーを防ぐことは、
専用のブラウザーやプロトコルを開発して、配布する以外 不可能です。
HTMLのテキストデータは サーバーから送信されクライアント上になんらかの形で存在するので)

○右クリック禁止
http://www.broadband-xp.com/hidesource/contextmenu.html
○メニュー消し
http://www.gac.jp/article/index.php?stats=question&category=9&id=4577&command=msg
○コピペ禁止
http://chaichan.hp.infoseek.co.jp/qa3000/qa3418.htm

ということで、上記のどれかのサンプルHTMLでOKなら
”それから” JSPやStruts用に改造しましょう。


にぃにぃ
ベテラン
会議室デビュー日: 2006/10/19
投稿数: 70
投稿日時: 2006-12-04 14:15
お世話になっております。JavaScriptの話で申し訳ありません。

右クリック禁止、コピペ禁止は出来ているのですが、アドレス&メニューバーの非表示
設定がやはりできません。
>○メニュー消し
>http://www.gac.jp/article/index.php?>stats=question&category=9&id=4577&command=msg

この上記のリンクですが、解決法は書いておらず、(スレッド中の
いくつかのリンク先が存在していなかったので見れませんでした。)
やはり、
A画面→B画面&C画面(CはBと同じでその後B画面の削除)→D画面→E・・・
となるのが一般的なことを書いていました。

スキルアップ/キャリアアップ(JOB@IT)