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

java1.5
jsp2.0
eclipse3.3
IE7
でWebシステムを開発しています。

画面上にhtmlファイルをドラッグ&ドロップ(以下D&D)することを禁止させたく、
JavaScriptによる制限をしようとしています。

同件があるかどうか「ドラッグ&ドロップ 禁止 html」のキーワードで検索したところ、
<body ondragover="return false">
これで制限できるような記述があり、
とりあえずHTMLで作成してD&Dをうまく制限できました。

が、JSP内のbodyタグにondragoverを記述したところ
eclipseが「Warning: unknown attribute "ondragover"」と返し、
D&Dしても制限することができませんでした。

JSP内でD&D制限することは可能なのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

JSPというより、ブラウザーのイベント仕様とjavascriptのハンドラーの問題


だと思います。
 IEでは、onDragDropイベントのハンドラーでfalseを返せば、ドラッグ&ドロップ
が禁止されます。onDragDropはIE独自のもので他のブラウザーにはありません。

 一方、ondragoverイベントは、javascriptによるドラッグ&ドロップを制御する
APIに使うイベントで、サポートしているブラウザーは多いです。でも意味が違い
ます。ondragoverのイベントハンドラーでfalseを返せば、そこ(イベントターゲット)
にドロップを許可するという意味になります。
https://developer.mozilla.org/ja/DragDrop/Drag_a …


--------------------------------
eclipseが「Warning: unknown attribute "ondragover"」と返し、
この手のWarning:は無視するしかないです。

お使いのEclipseのバージョンが解りませんが、
3.5(Galileo)のjavascript IDEでは
「ECMAScriptビルトイン・ライブラリー」(ECMA3)
「ECMA 3 ブラウザー・サポート・ライブラリー」
しかなく、
ondragxxとか、contenteditableとか、designModeとかの新しい属性
は「Warning: が出ます。

もしかしたら、対処法はあるのかも知れませんが...
    • good
    • 0
この回答へのお礼

さらに調べてみたのですが、
このD&Dのスクリプトを入れても
タイトルバーとかにD&DしてしまうとIEの仕様上、結局制限できないんですね。。。

eclipseは3.3を使用していますが、3.5でもワーニングがでるんですね。
とりあえずeclipseの定義にないだけで動作としては問題ないようでしたので
気にしないことにしました。

ご回答ありがとうございました。

お礼日時:2010/11/28 21:56

JSPで書こうとブラウザに表示されるのはただのHTMLです。


eclipseのWarningは、ただondragover属性が
eclipse内の定義にないだけだと思うので気にしなくてもいいのではないかと思います。

制限できなかったというJSPを表示したときのHTMLソースと
うまく制限できたというHTMLソースに何か違いがあるのではないでしょうか。
    • good
    • 0
この回答へのお礼

>うまく制限できたというHTMLソースに何か違いがあるのではないでしょうか。
もうひとつ別のJSPを作成したところ、ワーニングはでるけど制限はできました。
余計な記述をしてる気がしてきました。見直してみます。

ご回答ありがとうございました。

お礼日時:2010/11/28 21:52

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qセレクトメニューを選択不可にしつつvalueの値を生かす方法

いつもこのサイトを利用させていただいています。
セレクトメニューの選択不可はdisabledを使えばできることがわかったのですが、それだとvalueの値が保持されませんよね。
選択不可なんだけど、value=""の値を持たせたいのですが、どのようにすればよいでしょうか?
ご教授よろしくお願いします。

Aベストアンサー

disabledされるであろう項目名と同じ項目名について、
HIDDENで定義します。名前は、_h を付けるとか。
初期値では、disabledで無効化して置き、

if (fOBJ["data_kit"][1].checked) {
fOBJ["pc_os"].disabled = false;
fOBJ["pc_os_h"].disabled = true;
}
else {
fOBJ["pc_os"].disabled = true;
fOBJ["pc_os_h"].disabled = false;
}

なんてコードで有効にしてしまう。
なんてアイディアではどうでしょうか?

もちろん。受け側でも、_h 付きに付いてもチェックして頂く必要があるのですけど。

# 試してないので分かりませんが、_h なしでも動く様な気もすこし。。。

Qhtmlのfileタグに自動で値を入れる方法

htmlのタグでいって
<input type="file">を用いてファイルをサーバーにアップロードしたいと思っています。で、このとき、ファイル名は任意に選べるのではなく固定で送信したいと思っています。

すなわち、HTMLを読み込んだ時点で、fileのテキストボックスにファイルパスが埋め込まれているか、JavaScriptで、ファイルパスを自動入力するようにしたいと思っています。

最終的には、form内のオブジェクトをすべて非表示にし、onload時にsubmitするような形にしたいと思っています。いろいろ事情があって苦肉の策になっています…。

とりあえず(だめだとは思っていたのですが)
<input type="file" value="ファイルパス" name="filepath">
と直書きにしてみたり
document.all.filepath.value = "ファイルパス";
などとしてみたりしましたがだめでした…。
W3C勧告の使用上はvalueでファイルパスを指定できるようになっているようなのですが、現在の一般的なブラウザでは禁止されているようですね。

このような場合、何らかの方法でfileにファイルパスを自動入力することはできますでしょうか?
もしできない場合、何らかの方法で実現する方法はありますでしょうか?よろしくお願いします。

ちなみに実現できればいい環境は
WinXP環境のIE6です。言語はクライアント言語はJavaScriptのみで、という条件付です。
できないかもしれないのですが、こういうのって必要になるときもあるよなーなどと思っており、もしかしたら解決方法があるかもしれないと思い質問しました。よろしくお願いします。

htmlのタグでいって
<input type="file">を用いてファイルをサーバーにアップロードしたいと思っています。で、このとき、ファイル名は任意に選べるのではなく固定で送信したいと思っています。

すなわち、HTMLを読み込んだ時点で、fileのテキストボックスにファイルパスが埋め込まれているか、JavaScriptで、ファイルパスを自動入力するようにしたいと思っています。

最終的には、form内のオブジェクトをすべて非表示にし、onload時にsubmitするような形にしたいと思っています。いろいろ事情があって苦肉...続きを読む

Aベストアンサー

やっぱ無理じゃないでしょうか。
なにか裏ワザ的な方法で一時的にできたとしても、いつか直されるかもしれないのでおいそれとは使えないし。

>W3C勧告の使用上はvalueでファイルパスを指定できるようになっている
→参考URL 「ユーザが明示的に送信を求めたファイル以外のものは送ってはいけない」とあります。

参考URL:http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/appendix/notes.html#forms-security

QdoGetとdoPostの違い

それぞれブラウザからのリクエストの種類に対応する
メソッドがdoGet,doPost。
doGetはブラウザからGETでそのサーブレットに
リクエストがあった時に、処理が始まるメソッド、
doPostは同じようにPOSTを受け取った時に動き出す

・・・・・ということなのですが、
doGetもdoPostも、中身のコーディングの仕方としては
同様でいいのでしょうか?
いま、doGetでリクエストに対応する処理をうけつけて
いるのですが、255バイトまでなのでdoPostのほうが
いいということがかかれていました。

これは、ブラウザ:Servletのメソッドで対応してれば
いいだけで、結局は送信量の違いだけですか?
そのへんがよくわかってないので教えてください。

ちなみに、doGetでやってる処理は、

public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

//Bean(workBean)のインスタンス作成
wk = new work_Bean();
//Bean処理実行
wk.Work();





//BeanをJSPに渡すためにHttpServletRequestオブジェクトにセット
request.setAttribute("wk",wk) ;

//ViewであるJSPを呼び出す
RequestDispatcher rDispatcher =
request.getRequestDispatcher("/kanri_JSP.jsp");
rDispatcher.forward(request,response);

こんなかんじでしてます。
あとは、ネットで、人のサンプルとかみると
doGetメソッドに処理をかいており、doPostでは
doGet(request,response);として
doGetをよんでたりするんですが、
これは、PostでもGetと同様の処理ができると
いうことですか?
基本的な質問過ぎるかとおもいますがおしえてください。

それぞれブラウザからのリクエストの種類に対応する
メソッドがdoGet,doPost。
doGetはブラウザからGETでそのサーブレットに
リクエストがあった時に、処理が始まるメソッド、
doPostは同じようにPOSTを受け取った時に動き出す

・・・・・ということなのですが、
doGetもdoPostも、中身のコーディングの仕方としては
同様でいいのでしょうか?
いま、doGetでリクエストに対応する処理をうけつけて
いるのですが、255バイトまでなのでdoPostのほうが
いいということがかかれていました。

これは、ブ...続きを読む

Aベストアンサー

GET と POST では、パラメータをプログラムに渡す仕組みが全く違います。
仕組みが違うので渡せるパラメータの大きさが違う、等の違いが出てきます。

ですが、Servlet では、その違いを request オブジェクトが全部隠してくれて
いるので、気にしなくて良いです。つまり、同じことができて、呼出され方が
違う、と。

普通は、html や JSP の方も、Servlet を意識して書くでしょうから、
どちらかだけの実装で良いのですが、汎用的(呼ぶ人を特定しない)な Servlet
を書こうと思ったら、両方を実装しておく、と理解しておけば良いです。


ちなみに、GET で渡せるパラメータの大きさは 255 バイトと決っているわけでは
ないし、POST で渡せるパラメータの大きさに制限が無い、というわけでもあり
ません。

GET の制限は、どちらかというとブラウザ側の実装によって決ってくることで、
POST に制限があるとしたらサーバ側(例えば、Servlet コンテナ)の実装に
よってきます。

Qの意味を教えてください。

Javascriptを見ていると
<a href="#" onClick="new_open();return false">
なる記述がありますが、
この<a href="#"
の部分の意味を教えてください。
<a herf まではわかるのですが、この#はどのようないみなのでしょうか?

Aベストアンサー

href="#" というのは「そのページの最上部へのリンク」という意味で、スクロールした場所から一番上に戻したい場合に使います。
ちなみに、同ページ内への # 指定でのリンクでは、ページは読み込まれずスクロールするだけです。

<a href="#" onClick="new_open();return false">
というのは、そのリンクがクリックされた時に new_open という関数を実行し、他の処理はするな、という意味です。
return false というのが、A タグ本来のジャンプ動作をキャンセルさせるためのもので、これを取ってしまうとページ最上部にジャンプしてしまいます。

このスクリプトを書いた人は onClick だけが必要だったのでしょうが、href がないとリンクの下線が出ないなどの不都合があるため、やむなく # を書いたのでしょう。

JavaScriptの内容を実行したいだけなら、
<a href="javascript:new_open()">
と書けば十分なのですが、一部のブラウザではこのタイプのリンクをクリックすると、アニメーションGIFが止まってしまうなどの弊害があるため、嫌う人もいるようです。

また、JavaScriptが有効でない環境の人は、質問に書かれたリンクをクリックしてもページ最上部に戻されるだけで、開くべきページの内容を見ることができません。
なので、
<a href="ページのURL" target="_blank" onClick="new_open(); return false">
とするなどして、非JavaScript環境にも対応した方が親切です。

長文失礼しました。

href="#" というのは「そのページの最上部へのリンク」という意味で、スクロールした場所から一番上に戻したい場合に使います。
ちなみに、同ページ内への # 指定でのリンクでは、ページは読み込まれずスクロールするだけです。

<a href="#" onClick="new_open();return false">
というのは、そのリンクがクリックされた時に new_open という関数を実行し、他の処理はするな、という意味です。
return false というのが、A タグ本来のジャンプ動作をキャンセルさせるためのもので、これを取ってしまうとペー...続きを読む

Qのイベントについて

<input type="file">でファイルを選択した時点にイベントを追加する方法を教えてもらえませんか?
セキュリティの観点から無理なのでしょうか?

Aベストアンサー

ファイルを選択した時点で、
onchange イベントが起こりますので、
それを利用すればいいです。
例:
<form name="File">
<input type="file" name="UPLOADFILE" onchange="alert(document.File.UPLOADFILE.value)">
</form>

Qホームページでファイルをダウンロードさせる

お世話になります。
会社のホームページを制作中です。
マニュアルなどをアップしておき、ユーザーにダウンロードしてもらうページを作ろうと思っています。
<ベクターのような>
参考になる情報ありましたら教えてください。
宜しくお願いいたします。

Aベストアンサー

ダウンロードについて、
参考URLのページに分かりやすく書いてあるようです。
例もあるのでぜひ参考にしてください。

参考URL:http://www.tohoho-web.com/wwwxx013.htm

Qドラッグ&ドロップスクリプトがIE8で動かない

http://tool-man.org/examples/sorting.htmlで
作成公開されているドラッグ&ドロップスクリプトがIE8では、
正常に動作しないのですが、修正をされた方いらっしゃいますでしょうか?

Aベストアンサー

drag.jsの117行目に
originalZIndex = typeof(originalZIndex) != "undefined" ? originalZIndex : 1;
みたいなの追加なんてどうです?

#適当にfirefoxと同じ値になるようにしてみただけなので、正しくないかもしれませんが・・・

QJOIN後同一名カラムから値がとれない

こんにちは、mysqlでJOINした後、値を取得したいのですが、
2つのテーブルに値があり、片方を指定して取得する方法がわかりません。
いろいろ調べてみたのですがわかりませんでした。
どなたかご存知の方がいたら教えてください。

c_diary テーブルと c_member テーブルには、両方にr_datetimeという列があります。
それを別々の変数に代入したいのですが、うまくいきません。

SELECT * FROM c_diary left join c_member on c_diary.c_member_id = c_member.c_member_id
$rs = mysql_query($sql);
while ($item = mysql_fetch_array($rs)) {
$c_diary_r_datetime = $item['c_diary.r_datetime'];
$c_member_r_datetime = $item['c_member.r_datetime']
echo $c_diary_r_datetime."/".$c_member_r_datetime;
}

とやっているのですが、値が入らず空白となってしまいます。
どなたか、解決法をご存知の方がいたら教えてください。

こんにちは、mysqlでJOINした後、値を取得したいのですが、
2つのテーブルに値があり、片方を指定して取得する方法がわかりません。
いろいろ調べてみたのですがわかりませんでした。
どなたかご存知の方がいたら教えてください。

c_diary テーブルと c_member テーブルには、両方にr_datetimeという列があります。
それを別々の変数に代入したいのですが、うまくいきません。

SELECT * FROM c_diary left join c_member on c_diary.c_member_id = c_member.c_member_id
$rs = mysql_query($sql);
while ($it...続きを読む

Aベストアンサー

基本を理解していないですね?
SELECTで*は、テストレベル以外で使ってはいけません。

$sql="SELECT c_diary.r_datetime as c_diary_r_datetime
c_member.r_datetime as c_member_r_datetime
FROM c_diary left join c_member on c_diary.c_member_id =c_member.c_member_id"

と抽出するデータはユニークな名前になるよう別名をつけて列記します


人気Q&Aランキング