12/01/09 21:30:39.83
盛り上がってるね。数式のパース書いてみたけど。個人的にはちゃんと
チェックできる奴が分かっていて使うeval()は必要悪、みたいに思う。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML//EN">
<html><head><title>???</title>
<script type="text/javascript">
var s = '1+2';
function exp() {
var v = term();
while(s.match(/^[+-]/)) {
if(s.match(/^[+]/)) { s = s.substring(1); w = exp(); v += w; }
else { s = s.substring(1); w = exp(); v -= w; } }
if(s.match(/./) && !s.match(/^[)]/)) throw 'syntax'; else return v;
}
function term() {
var v = fact();
while(s.match(/^[*/]/)) {
if(s.match(/^[*]/)) { s = s.substring(1); w = term(); v *= w; }
else { s = s.substring(1); w = term(); v /= w; } }
if(s.match(/./) && !s.match(/^[-+)]/)) throw 'syntax'; else return v;
}
つづく(2レスなのでご容赦を)
329:Name_Not_Found
12/01/09 21:31:17.72
function fact() {
if(s.match(/^[0-9]/)) {
var t=s.match(/^[0-9]+/)[0]; s=s.substring(t.length); return parseInt(t); }
if(s.match(/^[(]/)) {
s = s.substring(1); var v = exp();
if(s.match(/^[)]/)) { s = s.substring(1); return v; } else throw 'syntax'; }
}
function calc() {
try {
s = document.getElementById('t0').value; alert(exp());
} catch(e) { alert('syntax error, seeing:' + s); }
}
</script>
</head><body>
<div><input type="text" id="t0" value="((1+2+3)*2+19*(30*2))/2">
<button onclick="calc()">calc</button></div></body></html>
330:Name_Not_Found
12/01/09 21:35:06.89
面倒くさいからconsoleで実行できるスクリプトだけのにしてくれ
331:Name_Not_Found
12/01/09 21:40:42.11
>>330
すみません。その場合、sに数式文字列を格納し、exp()を実行します。それだけ。
332:Name_Not_Found
12/01/09 21:42:12.82
>>328
車輪の再発明乙
URLリンク(d.hatena.ne.jp)
333:Name_Not_Found
12/01/09 21:43:18.29
電卓関係ないな
334:Name_Not_Found
12/01/09 21:43:51.69
>>332
はい、そりゃ誰でも書けるとは思います。練習としてやってみました。
335:Name_Not_Found
12/01/09 21:55:46.22
evalはテンプレートエンジンとかで使うな
ここみたいな低レベルなスレでは一律使うなでいいんじゃねーの
>>110も危なっかしいから使うなって言われたんだろ
336:Name_Not_Found
12/01/09 21:59:29.11
>>333
最終的にJSパーサーを作るまでやるから
337:Name_Not_Found
12/01/09 22:07:57.21
>>332
カッコ使えないじゃん
338:Name_Not_Found
12/01/09 22:16:15.81
カッコつけんなよ
339:Name_Not_Found
12/01/09 22:39:03.30
それこそ328に作ってもらえばいいんじゃねの
340:Name_Not_Found
12/01/09 22:51:48.03
amachang先生やdankogai先生レベルじゃないと作れないよ
おまいらには無理
341:Name_Not_Found
12/01/09 23:00:47.06
eval否定ってJSONどーすんだ。
342:Name_Not_Found
12/01/09 23:05:48.64 veZ1XhXh
下記で、jsonが読めないのですが、
どうすれば、json読めるようになりますでしょうか。
--
<!DOCTYPE >
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript">
var jsonObject = {
"1":"a",
"2":"b"
}
function push() {
alert('jsonObject.1');
}
</script>
</head>
<body>
<input type="button" onclick="push();" value="push">
</body>
</html>
343:Name_Not_Found
12/01/09 23:06:38.95
>>339
もちろん >>328-329 はかっこに対応してるけど。そういうお題だったから。
>>341
別に、ヘンなものがないか検査してからeval()するか、全部自前でパースするか、どっちでも
いいと思うけど。何も考えずにeval()する奴が叩かれるというだけでしょ。
344:Name_Not_Found
12/01/09 23:11:22.91
>>342
jsonObject[1] とかじゃないの。テンプレ >>2 のQ4/A4も読むといいよ。
345:Name_Not_Found
12/01/09 23:56:15.90
JavaScriptでevalを使うなって話は
Cでgotoを使うなって話に似てる。
判って使う分には問題ない。
むしろ、他人の「使うな」って評価を無批判に受け入れちゃう方が問題。
自分で熟慮して、「使うな」って自分を律する事には口を挟まない。
346:Name_Not_Found
12/01/10 00:21:39.85
いやJSONにeval必要ないだろ
347:Name_Not_Found
12/01/10 00:38:58.18 CIijrwn/
(おいおいコイツらいつまでやってんだよさっさと出てけよ・・・)
348:Name_Not_Found
12/01/10 01:11:44.66
evalはフェイルセーフじゃないから好きじゃない
349:Name_Not_Found
12/01/10 01:18:02.02
>>342
どこにもJSONが見つからないよ
350:Name_Not_Found
12/01/10 02:09:38.47
勉強してていくつか質問
1.ダブルクオーテーションの中ではシングルクォートを使うってのが分かったんだけど
更にシングルクォートの中で文字を囲いたいときにはどうするの?
シングルクォート以降はエスケープってやつをしなきゃいけないの?
入門書を見ながら勉強してて少しは慣れてきたんだけど
Jsの書き方のルールに苦戦しててよく間違えてエラーで怒られる。
2.イコールの後の文字は必ずダブルクオーテーションで囲わないとダメって認識であってる?
3.下の構文なんだけど同じ「visibility」メソッド?でも後に続くプロパティの間の記号が
「=」と「:」があるんだけど、どう使い分けたらいいの?
スタイルシートだからコロンになってるの?
だとするとそれ以外は全部「=」を使えばOKなの?
<input type = "button" value = "文章を消す"
onclick = "document.all('text').style.visiblity = 'visible'">
<div id = "text2" style = "position:absolute; left30; top:120; color:red;" visibility:hidden;">
351:Name_Not_Found
12/01/10 02:24:00.92 CIijrwn/
jsを弄る前にhtmlとcssを勉強したほうが幸せになれるぞ
352:Name_Not_Found
12/01/10 02:27:37.52
>>351
やってみる。
しかしどの程度までできるようになったらいいんだ?
353:Name_Not_Found
12/01/10 02:35:34.61
とりあえずhtmlとcssとjsの区別がつくまで
354:Name_Not_Found
12/01/10 03:19:48.58
>>352
HTML5とかDHTMLの質問スレッドがあればそこに行った方がいい
355:Name_Not_Found
12/01/10 03:21:23.06
もはやここは隔離スレだな
356:Name_Not_Found
12/01/10 03:26:51.44
質問者が初心者なのはいいんだが、回答する方に初心者がいると不毛な議論に発展するんだよな
357:Name_Not_Found
12/01/10 03:40:39.03
初心者スレだからそれでいい
358:Name_Not_Found
12/01/10 04:05:12.81
HTML5が流行ってWebProgから人が流れ込んできたせいだな
2012年はHTML5の時代やで
359:Name_Not_Found
12/01/10 04:08:54.27
本スレがないのがよくない
360:Name_Not_Found
12/01/10 04:27:49.79
ECMAScriptスレがあるじゃん
361:Name_Not_Found
12/01/10 04:42:48.16 V9aGb3Q1
>>342
var jsonObject = {
"1":"a",
"2":"b"
}
1がクォートされて"1"になってるんで
jsonObject["1"]
あと、これはjsonではなく、ただのJavaScriptのオブジェクトな
362:Name_Not_Found
12/01/10 04:43:57.88 V9aGb3Q1
蛇足かもだけど
var jsonObject = {
"1":"a",
"2":"b"
};
↑最後にセミコロンを
363:Name_Not_Found
12/01/10 05:03:22.56
>>360
ここは(D)HTMLで使うJSだからECMAはちょっと違う
364:302
12/01/10 05:11:30.35
>>361
指摘するのは、そこじゃないて。
> alert('jsonObject.1');
まず、クォートが不要。
そしてドットシンタクスの場合、識別子である必要があるから、
数字で始まる値は指定できないんで、書くなら jsonObject[1]。
(jsonObject["1"] でも良いけど)
365:Name_Not_Found
12/01/10 05:12:17.95
あれ、名前が…。
366:Name_Not_Found
12/01/10 07:32:24.07
jQueryでドロップダウンメニューをslideToggleで作ったのはいいんですが、
連続でマウスオーバーしたらその回数だけ開閉するのはどうにかならないんでしょうか?
調べてもそれらしい情報がでてこないもので・・・
367:Name_Not_Found
12/01/10 08:03:33.29
数値の入った文字列をevalで数値化してるのですが
あたまに"0"が入ってると8進数になってしまいます
単純に頭に0があれば削ればいいだけなんですが
もっとスマートな方法は無いのでしょうか?
368:Name_Not_Found
12/01/10 08:08:29.87
>>367
eval()を使うのが間違い。parseInt(文字列, 10)を使う。
>>366
onmouseoverではフラグ立てるだけにして、setInterval()から呼ぶコードで
フラグ立ってたらメニュー開くようにすればいいんじゃないかな。
369:Name_Not_Found
12/01/10 08:16:43.53
eval不要説唱えてる奴は宗教でしょ。
言われてた当初はそれなりに意味があったのかもしれないけど
多くは思考停止して闇雲に追従しているだけみたいな。
スレの性質に関係なく「sageろカス」とかいうのもその類。
「スクリプトのコードはコメントタグで囲わなきゃいけないんだよ^^」なんて
自称JSそれなりに知ってる人さんから昔優しく“指導”されたことがある。
そのくせ「Netscapeなんてもう誰も使ってないし切り捨てていいよ」みたいな。はぁ。
自称JSそれなりに知ってる人さんにとっては、Netscapeなんかよりも
JavaScript非対応でコードが文字列としてずらずらと表示されちゃうブラウザ
(NCSA Mosaicとかですかね?)の占めるシェアの方が無視出来ないらしいです。
そういうくだらないしがらみはもう捨てていきましょうよ。
370:Name_Not_Found
12/01/10 08:28:47.94
eval()必要説も同じくらい宗教なんだよね。宗教論争、無意味でスレの浪費だからやめてほしい。
せっかく終わったのに上から目線でまた火をつけるとかもやめてほしい。
371:Name_Not_Found
12/01/10 08:30:39.76 6w+N2uy0
>>366
少し待ち時間入れればいいよ
マウスオーバですぐ発火させないで、setTimeoutで20msecくらい
待ってから表示させるだけでだいぶ違う
触った時のレスポンスと待ち時間はバーターだから丁度よいタイミングに
なるように待ち時間をすりあわせするといいよ
ここまで書いて>>368に気付いた…
せっかくだから投下しときますすんません
372:Name_Not_Found
12/01/10 08:31:22.80
まあevalはCのgotoと同様に、宗教上?の理由で嫌われているのと同様だろうな。
要するにユーザーの入力を単なる文字列では無く、
JavaScript的(あるいはDOM的)に意味のあるものとして利用するのは危険なので、
evalでもinnerHTMLでも、本当にその文字列を使って大丈夫かどうかを必ず意識する必要があるという事。
初心者云々は単に慢心を生むだけなので、初心者経験者は全く関係無い。
evalが嫌われるのは、代替手法が無いような本当に必要となる場面が少ない(JSON文字列をJSONオブジェクト化するなどくらい)ので、
わざわざリスクのある手法を回避したいという人間が多いからでは。
373:Name_Not_Found
12/01/10 08:34:18.50
>>370
うだうだ言ってないで早くコードかけよ
374:Name_Not_Found
12/01/10 08:50:59.46
>>373 ん?数式の解析とかは >>328-329 にあるからね。
>>372 とっても賛成。テンプレに入れるかはともかく、Q&Aにしてみた。
Q. eval()は使ってはいけないと言われたのですがなぜでしょう。
A. ユーザ入力をそのままeval()に与えるということは、ユーザにあなた
のプログラムを全く任意に改変させるのと同等なリスクがあります。
また、プログラム保守上も、そこで「何が」起きるかコードを見たとき
に分かり難くなるというリスクがあります。なのでeval()を使う際は
(a)与える文字列は予め検査して想定されている事だけが起きることを確認。
(b)そこで何が起きることを想定しているかをコメント等で記述。
の2つを守るのがよいスタイルですが、これは一定の手間が掛かります。
過去スレにあるほとんどの(99%以上の)事例は「数値への変換」「変数
の設定」など自然かつ安全な代替手段があるものなので、そのような
ものを知らないレベルの人が安易に使うことを警告して「eval()禁止」
と言われることが多いようです。eval()を使わなければできないことは
確かに存在しますが、そのようなことで普通のWeb制作者がやりたいこ
とは大抵、上記の要件をカバーしたライブラリなどの形でパッケージさ
れたものがあるので、自分で直接eval()を書こうとする前に十分見直さ
れることを薦めます。
375:Name_Not_Found
12/01/10 09:05:13.71
/: : : : : __: :/: : ::/: : ://: : :/l::|: : :i: :l: : :ヽ: : :丶: : 丶ヾ ___
/;,, : : : //::/: : 7l,;:≠-::/: : / .l::|: : :l: :|;,,;!: : :!l: : :i: : : :|: : ::、 / ヽ
/ヽヽ: ://: :!:,X~::|: /;,,;,/: :/ リ!: ::/ノ l`ヽl !: : |: : : :l: :l: リ / そ そ お \
/: : ヽヾ/: : l/::l |/|||llllヾ,、 / |: :/ , -==、 l\:::|: : : :|i: | / う う 前 |
. /: : : //ヾ ; :|!: イ、||ll|||||::|| ノノ イ|||||||ヾ、 |: ::|!: : イ: ::|/ な 思 が
/: : ://: : :ヽソ::ヽl |{ i||ll"ン ´ i| l|||l"l `|: /|: : /'!/l ん う
∠: : : ~: : : : : : : :丶ゝ-―- , ー=z_ソ |/ ハメ;, :: ::|. だ ん
i|::ハ: : : : : : : : : : : 、ヘヘヘヘ 、 ヘヘヘヘヘ /: : : : : \,|. ろ な
|!l |: : : : : : : : :、: ::\ 、-―-, / : : :丶;,,;,:ミヽ う ら
丶: :ハ、lヽ: :ヽ: : ::\__ `~ " /: : ト; lヽ) ゝ
レ `| `、l`、>=ニ´ , _´ : :} ` /
,,、r"^~´"''''"t-`r、 _ -、 ´ヽノ \ノ / お ・
,;'~ _r-- 、__ ~f、_>'、_ | で 前 ・
f~ ,;" ~"t___ ミ、 ^'t | は ん ・
," ,~ ヾ~'-、__ ミ_ξ丶 | な 中 ・
;' ,イ .. ヽ_ ヾ、0ヽ丶 l /
( ;":: |: :: .. .`, ヾ 丶 ! \____/
;;;; :: 入:: :: :: l`ー-、 )l ヾ 丶
"~、ソ:: :い:: : \_ ノ , ヾ 丶
376:Name_Not_Found
12/01/10 09:10:19.76
やっぱり宗教だなあ
evalに限った危険なんて1つもないのにw
377:Name_Not_Found
12/01/10 09:14:08.46
ユーザーが入力したコードが実行されて何が問題なのかわからない
あるとしても重箱の隅を突くような特殊なケースじゃないか?
そんなんだったらevalに限った話じゃない
378:Name_Not_Found
12/01/10 09:21:08.86
>>366
var obj = $(selectors).not(':animated');
animate()実行中要素を選択しない
var obj = $(selectors).stop();
実行中animate()を停止
379:Name_Not_Found
12/01/10 09:23:10.06
別にユーザが任意の改変をしてもかまわないという人は別にそれでいいんじゃないの。
ふつう、ユーザ入力に対してチェックとかするよね。それはサーバ側に送られる
ユーザ入力をある程度制御しないとまずいと思うからやるんだと思うけど。
JS上でのチェックとサーバのチェックと2重にするところを、サーバだけの
チェックになっても構わないとか、よそのAPIをJSから直接叩いてるところで
何を叩かれても構わないとか、そういう意味になるわけどいいんだろうか。
漏れはそれは嫌だからユーザに任意の改変は許したくないと思うわけで。
380:Name_Not_Found
12/01/10 09:24:37.34
ユーザー入力じゃなくて開発者の意図しない入力って言えよ
381:Name_Not_Found
12/01/10 09:28:48.90
>>380 なるほど御意。
382:Name_Not_Found
12/01/10 09:32:18.61
>ユーザ入力をある程度制御しないとまずい
これは間違いだろ
JS側での入力チェックはユーザビリティの観点以外の何物でも無いと思うのだが
383:Name_Not_Found
12/01/10 09:36:33.16
全くもって意味わからんな
ユーザーが改変したいと思ったときは
わざわざソース調べてここにeval使われてるから狙おうとかしないだろ
普通にアドレスバーに打つだけ
それにそもそもformチェックでevalの出番はないでしょ
384:Name_Not_Found
12/01/10 09:46:40.95
屁理屈こねないで使うなって注意されたら使うなよ。
躾がなってないなこいつら。
385:Name_Not_Found
12/01/10 09:53:53.77
>>382
フォームとかからサーバに投げる前段階としてのチェックならそうだけどね
入力から、それによって引き起こされる何らかのアクションまで
ブラウザ側で完結してる部分なら、当然ブラウザ側でちゃんとチェックしないといけない
問題とされている領域を間違えてるっていうかなんと言うか…
jsでアプリケーション作ったこと無いから、もしかしてこういう発想しか出来ないのかな
386:Name_Not_Found
12/01/10 09:58:37.11
入力をチェックすることとeval禁止が直接結び付かないんすけど…
こいつさっきから何言ってんだ?
例えば
NAME=prompt("主人公の名前を決めてください","")
~NAMEのチェック~
とやるのはわかるが
こいつが言いたいのは
NAME=eval(prompt("主人公の名前を決めてください",""))
~NAMEのチェック~
ってことか??
387:Name_Not_Found
12/01/10 10:01:30.35
>>385
うだうだ言ってないで具体的で示せよ。
特殊じゃない凡例をな。
388:Name_Not_Found
12/01/10 10:05:42.28
evalは悪魔
悪魔は不要
不要不要
不要
悪魔
悪魔
不要
悪魔
不要
悪魔
不
要悪
魔
不
要
悪
魔不要悪魔不要悪魔
389:Name_Not_Found
12/01/10 10:10:40.28
>>385
クライアント側のみで完結する方が珍しいだろ。
通信が発生する時点で完結はしないからな?
それに
>サーバ側に送られる
これがついてる時点で"ブラウザ側で完結してる部分"なんて意図するわけ無いだろ
ブラウザ側で完結する部分ならチェックするのは当たり前
390:Name_Not_Found
12/01/10 10:27:35.56
文字の色を上下でわける方法はありますか?
URLリンク(jsfiddle.net)
このような感じに書いてできると思ったのですができませんでした。
アドバイスおねがいします。
391:390
12/01/10 10:56:43.40
あばばば、cssスレで訊くべきでしたね
そしてclip:rectで解決できました
おさわがせ
392:Name_Not_Found
12/01/10 11:01:21.83
そういう特殊なことはブラウザ間で差が出るからやめとけ
素直にシンプルにCSS3使っとけ
393:Name_Not_Found
12/01/10 11:04:26.30
>>107お願いします
394:Name_Not_Found
12/01/10 11:06:52.92
>>393
えー、別にその要素のXY座標を求めて差し引くだけじゃないの。
offsetTop、offsetLeftで調べてみては。
395:Name_Not_Found
12/01/10 11:08:38.25
>>394
今から調べてやってみます
どうもありがとうございます
396:Name_Not_Found
12/01/10 11:15:05.40
>>395
マウスイベントのoffsetX,offsetY
397:Name_Not_Found
12/01/10 11:17:39.76
Borderがあるとブラウザによってややこしくなるから注意
398:Name_Not_Found
12/01/10 11:56:38.44
>>393
var xo = $('selector').offset().left;
var yo = $('selector').offset().top;
var x = Math.floor( event.clientX - xo - 180);
var y = Math.floor(-event.clientY + yo + 180);
こんなかんじでやれる。
399:Name_Not_Found
12/01/10 11:58:19.32
±180消し忘れた
400:Name_Not_Found
12/01/10 12:59:10.18
jqueryは甘え
401:Name_Not_Found
12/01/10 13:09:39.28
コードがスッキリするから出来ればjQueyrセレクター使って欲しい
402:Name_Not_Found
12/01/10 13:29:27.91
CSSセレクタと言え
403:Name_Not_Found
12/01/10 13:33:17.95
jquery独自のセレクタがあるんだけどね
404:Name_Not_Found
12/01/10 13:42:05.03
独自セレクタがあっても基本的な事はCSSセレクタで事足りるだろうが
405:Name_Not_Found
12/01/10 13:46:45.82
xPath使え。捗るぞ。
406:Name_Not_Found
12/01/10 14:08:45.99
>>404
「jqueryセレクタ」って言葉をわざわざ指摘して「CSSセレクタ」に強要する理由にはならんな。
407:Name_Not_Found
12/01/10 14:12:44.37 6w+N2uy0
>>374
evalの本当の危険性はそんな話じゃない!
糞コンサルがコードをevalで検索しただけで
「お宅のサイトのJSはevalを使っていて危険です」とクライアントにチクる
頼んでもいないのに、わざわざご丁寧なパワポで
↓
勤勉で真面目なクラ担当者は、evalが何かは知らないが「JS eval 危険」でググる
↓
俺(弊社、下請け)に電話かけてくる
コレ!
408:Name_Not_Found
12/01/10 14:13:22.52
>>406
CSSセレクタで事足りる事を
態々jQueryのセレクタを使えば良いという方がおかしいだろ
CSSセレクタの事を
jQueryセレクタと勘違いする子が発生しちゃうかもしれないだろうが
ベンダに偏らない標準的な用語選ぶ様にしろよ
409:Name_Not_Found
12/01/10 14:15:22.09
>>408
落ち着けよ。そんなにカリカリすることかよ
410:Name_Not_Found
12/01/10 14:15:48.84
素人丸出しな感想で悪いが
$('#hoge a')とかって確かにCSSと同じ指定の仕方だなーと思ってたが
ああいう指定方法をCSSセレクタって言うんだ
411:Name_Not_Found
12/01/10 14:38:19.99
querySelectorがあるじゃん
412:Name_Not_Found
12/01/10 15:10:19.47
対応環境が限られるquerySelecter使ったり
プラグインに頼ったりするのは同じくらい両方よくない
413:Name_Not_Found
12/01/10 15:19:20.65
XPathおっそいなw
よほど特殊な指定の仕方でもしない限り使えなくね?
414:366
12/01/10 15:25:56.98
366です。
色々な案ありがとうございます。
とりあえずある程度の意見を参考に試行錯誤してみたんですが、
実際まだjQueryを触って日も浅いのであまり難しいものが組めず、結局以下で落ち着く形になりました。
案をくださった>>368さん、>>371さん、>>378さんどうもありがとうございました。
それぞれの意見はメモに取ってあるのでわかる日が来たらそれも試してみようかと思います。
$(function(){
$('#nav li').hide();
$('#nav').hover(function(){
$('li:not(:animated)').slideDown('fast');
},
function(){
$('li').slideUp('fast');
});
});
415:Name_Not_Found
12/01/10 15:32:10.82
できるまでやらんと力つかんぞ
何ヶ月かかってもいいからできるまでやって報告しろ
妥協しましたの報告はいらん
416:Name_Not_Found
12/01/10 15:32:42.28
>>413
querySelectorの方が基本的に遅いぞ
jQueryで使われてるsizzleは知らんがな
417:Name_Not_Found
12/01/10 15:34:38.89
なーに言ってんだこいつ
盲目の信者はこええな
418:Name_Not_Found
12/01/10 15:38:17.97
jQuryで使うセレクタはjQueryセレクタだと思ったけど違うんだな
jQueryセレクタではCSSセレクタが使えるようになってるというのが正しいのか
>>414でできてるでしょ。jQuery使うならこれが正しい。
419:Name_Not_Found
12/01/10 15:41:25.91
>>417
「XPathよりquerySelectorの方が遅い」と言われたと勘違いしたに一票
420:Name_Not_Found
12/01/10 15:45:49.99
なーに言ってんだこいつ
文盲の信者はやべえな
421:Name_Not_Found
12/01/10 15:49:01.12
>>420=>>417
低脳レス用マクロでも組んだんか?
422:Name_Not_Found
12/01/10 15:50:40.54
《>413》
XPathおっそいなw
《>416》
querySelectorの方が基本的に遅いぞ
《>419》
「XPathよりquerySelectorの方が遅い」と言われてない
____
/ -- 丶、
/ ノ ●) ヽ┏┓
.| (●, ,⊃ ノ ┏┛
.ゝ、 `´ .へ ・
423:Name_Not_Found
12/01/10 16:05:20.80
どうせググって検索にヒットしたブログを鵜呑みにして
querySelectorは遅いからgetElementsByTagNameを使えみたいに思ってるんだろ
424:Name_Not_Found
12/01/10 16:05:45.90
>>418
CSSセレクタの拡張がjQueryのセレクタ
chromeのコンソールで下記を実行。2倍から3倍程度qquerySelectorの方が遅い。
逆でも同様の結果。
XPathの書き方によってはXPathの方が遅くなる事もあるけど基本は変わらん。
var i = 10000; console.time('evaluate');while (i--) {document.evaluate('id("r412")',document,null,7,null);};console.timeEnd('evaluate');
i = 10000; console.time('querySelector');while (i--) {document.querySelector('#r412');};console.timeEnd('querySelector');
425:Name_Not_Found
12/01/10 16:06:18.71
qquerySelector
↓
querySelector
426:Name_Not_Found
12/01/10 16:08:56.15
速度はブラウザ依存だからどっちもアホ
427:Name_Not_Found
12/01/10 16:42:40.48
jQueryも昔はXPATH使えたんだよね。取り除かれちゃったけど。
428:Name_Not_Found
12/01/10 16:49:25.01
>>424
綴りを間違えるような時点で
いかにこいつの認識が甘いかわかるなw
429:Name_Not_Found
12/01/10 17:06:20.29
var obj = $(selectors).not(':animated');
よかCSS:notのほうがって思ったけど実際どっちがいいんだろうな
430:Name_Not_Found
12/01/10 17:11:55.84
>>424
Firefox9とSafari5はquerySelectorよりXPathが2~3倍遅いぞ
しかも簡単なものならDOMセレクタとif文でフィルタリングするほうがもっと早いんだよな
431:Name_Not_Found
12/01/10 17:16:00.89
jqueryで書かれたサイトを見ると
こんなサイト見てる自分が恥ずかしくて
ついついbackspaceキーを押してしまう
432:Name_Not_Found
12/01/10 17:28:29.04
結局の所書くXPathやSelector、対象になるHTML次第。
433:Name_Not_Found
12/01/10 17:43:27.19
>>431
TwitterとかWikipediaとかamazonとかか。
434:Name_Not_Found
12/01/10 18:29:31.58
例えばセレクトボックスを操作したりといった
ユーザーの操作を一時的に全禁止するために
document.open()で読み込み中と同じ状態にさせてるのですが
これはどのくらいのブラウザで効果があるのでしょうか?
435:Name_Not_Found
12/01/10 18:32:06.14
Ajax始めたんですが、一度に読み込めるファイルは1個までとあるんですが
例えば3つのtextファイルを読み込みたくなったら
1つ読み込む→完了→次の読み込む→完了とやらなければならないのでしょうか?
436:Name_Not_Found
12/01/10 18:37:55.11
>>435
同期なら順にやるしかないけど、非同期なら3つ同時に進められる。
興味あるならdeferredで調べるといい。
437:Name_Not_Found
12/01/10 18:39:14.92
>435
お前本当は知ってるだろ
荒らしか?
438:Name_Not_Found
12/01/10 18:43:31.62
>>436
ありがとうございます
>>437
いや、本当に知らなかったんです
本に「ココでチェック:非同期通信では1回につき1個しか読み込めないのがルールです」
と書いてあったのでどうしてもやりたい場合どうすればいいのかな?と
439:Name_Not_Found
12/01/10 18:48:10.84
そんな意味のわからん本は捨てちまえ、わりとマジで。
本は例題集くらいに捉えて解説は参考にしてはいけない。
440:Name_Not_Found
12/01/10 18:49:18.13
> ココでチェック
この部分が初心者騙しな気がする
441:Name_Not_Found
12/01/10 18:51:23.65
>>438
1回につき1個は確かに正しいよ。一つのxhrインスタンスから複数個同時に読み込むのは無理だから。
ただ、非同期という条件下でxhrをいくつも用意することで、スタートは"順次"だけども、
読み込みは"並行"して行える。
442:Name_Not_Found
12/01/10 18:54:14.82
Ajaxやらライブラリーやら本来は中級者向けだと思う
というか基礎がしっかりわかるまで後回しにしていい部分
443:Name_Not_Found
12/01/10 18:59:14.68
>>441
詳しい解説ありがとうございます
A(go)、B(go)、C(go)、ABC(end)という形にできるんですね。自分がやりたい事がコレだったので助かりました
とういうことはその場合、場合分けということでjQueryを使ったAjaxの記述方法は止めた方がいいということなんでしょうかね?
$.ajax({~で一くくりになってるので、スタートも終わりも一つ一つやるので
A(go)、A(end)、B(go)、B(end)、C(go)、C(end)としか出来ないと思うのですが
444:Name_Not_Found
12/01/10 19:04:02.59
>>443
同期と非同期を少し勘違いしているような。。普通に$.ajaxで書けないことはないけど、
絡みあう形になるから、そこでjQuery.Deferredの登場。これ以上は説明がややこしくなるんで、
最初は簡単な例から自分で動かしてみたら。
445:Name_Not_Found
12/01/10 19:07:30.77
>>443
だめだこりゃw
jQueryなんか使わんとAjaxのAからやり直せ
というかまず非同期についてちゃんとイメージできてないだろ
とりあえずAjax 非同期でググってヒーヒーいいながら勉強しろ
jQuery使って楽しようとしていいのはその後だ
446:Name_Not_Found
12/01/10 19:08:00.90
了解です、本当にありがとうございました
447:Name_Not_Found
12/01/10 19:09:21.44
っつーか最近は入門書からjQuery教えるのか?
大学でもjQuery教えてるとかこの前このスレで見たけど
初心者にjQuery進めたら肝心な理解が進まないだろ
448:Name_Not_Found
12/01/10 19:13:40.96
ライブラリは大きなブラックボックスだからな
思った事をある程度簡単に実現してくれるかもしれないが
どうやったら思った事を実現できるかの力はつかないな
まあそのバランスが大事なんだけどね
449:Name_Not_Found
12/01/10 19:17:49.23
ここの住民はHTML5の各APIについての質問にどのくらい答えられるの?
450:Name_Not_Found
12/01/10 19:32:47.21
>>449
ここの住人はどんな難しい質問でも答えられるよ
ただしそれが的確な回答かどうかは別の問題だけど
451:Name_Not_Found
12/01/10 19:38:18.64
そのときの回答者が数人程度なら、文殊の知恵が出ることもある。
あまりに多いと船山に登るw
452:Name_Not_Found
12/01/10 19:43:55.90
>>449
WebRTCに興味を持つ人とかAudioとかな人等様々だと思うよ
まぁ時間帯等によりけりだけど
453:Name_Not_Found
12/01/10 19:44:24.60 6w+N2uy0
>>448
専門科目として教えているなら、それはないんじゃないかな
ピュアJSが理解できなければ、大学で学ぶ意味ないと思うし
自分は専門学校の一般教養として「ほーむぺーじのつくりかた」的なレベルで教えてて、
JSも「こう、ヌルヌル動くのはJSよ」と触れる程度
そうなると、時間もないのでjQuery使っちまいます
454:Name_Not_Found
12/01/10 19:49:49.39
JavaができないのにいきなりStrutsから入るようなものか
455:Name_Not_Found
12/01/10 19:58:06.11
時間がないとか言い訳過ぎる
一生jQueryにしがみついて生きていける人は少ないだろう
jQueryっていうのはあくまでも 『流行り』 なんだから
それよりもJSの基礎をしっかり教えた方が何倍もためになる
456:Name_Not_Found
12/01/10 20:01:21.62
>>455
一生jQueryにしがみつくってのは自分から学ぶ姿勢がゼロってことだよね。
時間があればコアを教えるべきだけどさ、jquery使ってこんな事出来ますよーって触りでいいんじゃないかな。
後は興味持った奴が自分で調べて、せっかく学校にいるんだから周りの人にも質問できる。これで仕方ないと思うよ。
457:Name_Not_Found
12/01/10 20:06:55.57
別にそれがJavaScriptの基礎も含むあくまで『JavaScript』の講義なら文句は言わんよ
でも基礎もしっかりできてない人に『jQuery』の講義をするのは問題だと思う
458:453
12/01/10 20:31:39.09 6w+N2uy0
あー
言いたいことは痛いほどわかります、が
『jQuery』の講義、なんてやらんですよ。HTMLもJSも書いてあるのを配って
ここをこう変えるとこうなりますねー楽しーねー、ってやるだけ
所詮一般教養だし、コンピュータの学校でもないし、
そうやって触って興味を持ってもらえれば儲けもん、てレベル
僕らが昔そうだったように、人が書いた完成品の理解できる部分だけ書き換えて
ちょっとずつ学ぼうとする子も、毎クール1人くらいいるよ
そういう子らには、授業外で教えたりもしてる
激しくスレ違いですねスミマセンもうやめましょう
459:Name_Not_Found
12/01/10 20:37:56.73
あーつまり
JavaScriptの講義じゃなくて
PCに慣れましょうねの講義なわけね
それなら話は別
460:Name_Not_Found
12/01/10 20:38:40.65
じゅ、じゅっじゅじゅジゅ後ユ害で教える!?
461:Name_Not_Found
12/01/10 20:45:31.35
先生そこは私のevalですぅ~脆弱性ついひゃらめぇ
462:Name_Not_Found
12/01/10 20:48:06.53
しまった!!
命の変数が君のスコープ内に漏れてしまった!!
463:Name_Not_Found
12/01/10 20:52:07.13
ふむ…やっぱりevalは必要だったな…
いや、ここは不要と言うべきか………
464:Name_Not_Found
12/01/10 20:53:12.29
また始まったのか?
465:435
12/01/10 21:57:31.96
何度も悪いですが、XMLHttpRequestを使って複数のURLからファイルを読み込む例がググってもなかなか見つからないのですが
やはりやるべきではないのでしょうか
466:Name_Not_Found
12/01/10 22:03:54.59
jQueryでajax関数を使い、success時のコールバック関数の中でdygraphのチャートを描画させることは出来ないのでしょうか?
以下のようなコードを書いたのですが、グラフが描画されません。。
<script type="text/javascript">
$(function() {
$.ajax({
url: '/hoge',
type: 'GET',
dataType: 'xml',
success: function(xml){
var g = new Dygraph(arg1, arg2);
}
});
});
</script>
467:Name_Not_Found
12/01/10 22:11:53.46
>>465
その複数のURLは同一のドメイン?
でなければ、クロスドメインで通信できない場合がある
適当な例を書いておく
// JSONファイルを取得する
var xhr = new XMLHttpRequest();
xhr.open('GET', 'URLリンク(example.com)', false);
xhr.send();
return JSON.parse(xhr.responseText);
468:Name_Not_Found
12/01/10 22:19:11.80
>>467
ありがとうございますここからやってみます
実行するhtmlと同一ドメインにあるa.txtとb.txtを読み込むのをjQueryの$.ajaxを使ってやっていました
469:Name_Not_Found
12/01/10 22:24:12.00
>>466
Dygraphを利用したことがないけど、気になったのはDygraphの引数かな
arg1とarg2の値はどうなってるの?
それとAjaxが原因かもしれないから、successだけじゃなくerrorも入れたら?
470:Name_Not_Found
12/01/10 22:40:05.21
>>466
1. var g = new Dygraph(a,b); のみで試す。ajaxを外す。
2. firebugのネットタブからAjaxの結果を調べる。
471:Name_Not_Found
12/01/10 23:21:37.48
chromeのコンテント・スクリプトについてです。
コンテント・スクリプトからそのページのグローバル変数にアクセスするにはどうしたらよいのでしょうか。
例えば、youtubeのページはグローバルオブジェクトのytがあります
URLリンク(www.youtube.com)
グローバルオブジェクトですので、↑のページでデバッガを開いてコンソールで「yt」と書いたらオブジェクトを取得する事が出来ます。
ですがコンテント・スクリプトでconsole.log(yt)としても「Uncaught ReferenceError: yt is not defined」と言われてしまうのですが
どうすればytにアクセス出来るのでしょうか。
同様に、jqueryを使おうと思った時にページ側で読み込まれていて、それを使いたいです。
例えばこのページはjquery-1.3.min.jsを読み込んでいます。
そしてコンテント・スクリプト内でwindow.jQueryを使いたいのですが、アクセス出来ません。
view-source:URLリンク(www.nicovideo.jp)
472:Name_Not_Found
12/01/10 23:33:17.88
>>471
単純にいうとChromeのContent Scriptが動いているページとYouTubeのページは別物だから
473:Name_Not_Found
12/01/10 23:38:07.56
>>471
location.href="javascript:/*ページ側の変数を使うコード*/;";
// or
var script=document.createElement('script');
script.textContent="/*ページ側の変数を使うコード*/";
document.body.appendChild(script);
474:Name_Not_Found
12/01/10 23:38:25.56
>>471
お前は荒らしか?
意味も無くニコ動やYouTubeのしかもよくわからない動画ページのリンク貼るなよ
475:Name_Not_Found
12/01/10 23:41:10.77
この程度で荒らしとかお前頭わいてんのか
476:Name_Not_Found
12/01/11 00:05:43.60
この程度で頭わいてんのとかお前荒らしか
477:Name_Not_Found
12/01/11 00:13:49.18
初心者 alert
中級者 console.log
上級者 テストツール
478:Name_Not_Found
12/01/11 00:22:13.75
達人 alert
479:Name_Not_Found
12/01/11 00:45:20.04
最近はサイトでアラート見かけること無くなったなあ。
うざいから絶滅してほしいね。
480:Name_Not_Found
12/01/11 00:54:43.12
何度も本当にすみません。さっきから色々なAjaxについてのサイト巡ってるんですが
$.ajax({
url: './a.txt,
type: 'GET',
dataType: 'text',
error: function(xhr,status){
$("#message").html("error");
},
success: function(data, status, xhr){
$("#meesage").html("Success");
}
});
この場合のa.txt、b.txt、c.txtを一括で取得する方法がどうしても解りませんでした
自分としてはこの$ajaxのURLを変えてこれ自体を3回繰り返すとか、successやerror時に他の関数で読み込んだりするの考えたのですが
結果的に全部3回通信するのでどうしても時間がかかってしまうので。本当に何度もすみません
481:Name_Not_Found
12/01/11 00:57:39.08
>>473
script.textで
482:Name_Not_Found
12/01/11 01:08:59.12
>>480
そのコードでa.txtが「非同期」で読み込める
url変えて三つ並べると、順番にGETのクエリが送られる
順番が保証されてるのはこのクエリ送信の順番だけ
受け取りは相手鯖からの到着順で順不同になる
483:Name_Not_Found
12/01/11 01:34:09.57
>>480
3つ取得するんだから通信は3回になる
1回で済ませたいのならサーバ側でその3つを1つにまとめてやるしかない
484:Name_Not_Found
12/01/11 01:43:57.38
>>480
一回のリクエストで複数のファイルを取得するのは無理だよ。
リクエストとレスポンは一対一の関係だから、場合によっては>>483みたいにサーバ側で一本化する必要がある。
同期であれば時間がかかるのは分かる。
A----|B----|C----|
でも非同期だったら取得が同時に進むからそこまで時間はかからない。
というか、サーバ側で一本化したところで3つ程度のファイル取得であれば大して変わらないかも。
A----
B----
C----| (うえのABCと比べたときに、短くなってるでしょ。これが非同期。)
質問の意図がよくわからないけど、
・リクエストとレスポンスは一対一の関係
・この場合は普通非同期で3つ同時に読み込むのが普通
・非同期を簡単にまとめる手法として Deferred がある
485:Name_Not_Found
12/01/11 01:51:32.12
ネットワークをほんの少しでも理解していればわかるはずなんだが
ネットワークはキャッチボール。3つも一度に投げれない受け取れない
486:480
12/01/11 02:03:15.11
>>482-484
これ異常無いほどの感謝です、助かります
自分としては複数のリクエストするときの記述方式がわからなかっただけで
スレッドをムダに消費して迷惑をかけました
487:Name_Not_Found
12/01/11 02:06:32.15
> 自分としては複数のリクエストするときの記述方式がわからなかっただけで
最初からそれ言えよ
くだらん説明しちまったじゃねーか
488:Name_Not_Found
12/01/11 02:07:00.73
iframe を 3つ用意しておいて、親で受け取れば良いよ。
489:Name_Not_Found
12/01/11 03:21:07.62
誰も具体的なコード教えてあげてなくてワロタw
490:Name_Not_Found
12/01/11 04:23:00.59
関数本体からはパラメータ宣言が優先されるというルールがあるみたいですがパラメータ宣言って何ですか?
491:Name_Not_Found
12/01/11 04:36:22.50
>>490
var a = 0;
function test() {
var a = 1;
alert(a);
}
test()の中が関数本体のこと
外側と内側で同一名の変数aが宣言されているときは内側が優先される
なので、アラートされるのは1
492:Name_Not_Found
12/01/11 04:52:04.89
>>491
ありがとうございます。
それの事だったんですね。
493:Name_Not_Found
12/01/11 04:52:43.37
>>490
>パラメータ宣言って何ですか?
肝心なことを書き忘れてた
パラメータ宣言ってのは、varやfunctionのことね
494:Name_Not_Found
12/01/11 05:27:56.12
>>490
パラメータだから関数の引数のことを言っているんだと思うが、
元の文章を読まないことには何のことだか分からない
495:Name_Not_Found
12/01/11 07:56:21.99
tablesorter2.0について質問です。
URLリンク(tablesorter.com)
上記サンプルのように動的に追加した行に対して、
pagerプラグインが読み込んでくれません(ページ送りが出来ない)。
何かいい手はありますか?ブラウザはfirefoxです。
496:Name_Not_Found
12/01/11 08:46:38.36
最終手段を最初に書いとくと
動く物を自分で作ればいい
497:Name_Not_Found
12/01/11 11:10:29.94
急に過疎
498:Name_Not_Found
12/01/11 11:19:55.92
そのまま写せばいいんじゃないの?
499:Name_Not_Found
12/01/11 11:28:16.50
まともに使えんようなプラグイン使おうとするなよw
500:480
12/01/11 11:38:45.20
>>487
具体的な例としては
array[path1、path2、path3]
for(i=0; i<3; i++){
$.ajax({
url: 'array[i],
type: 'GET',
dataType: 'text',
error: function(xhr,status){
$("#message").html("error");
},
success: function(data, status, xhr){
$("#meesage").html("Success");
}
});
}
こんな感じでしょうか?それとももっと良い記述方法があるのでしょうか?
Deferred使うにしても、元のコレがわからないので・・・。
501:Name_Not_Found
12/01/11 12:26:48.67
>>498
そのまま写すと、pagerは初期状態の行しか表示できません。
502:Name_Not_Found
12/01/11 12:41:24.57
>>495
tablesorterはわかった
だけど、pagerなんて名前のはいくつもあってどれかわからない
それのリンクも貼って
それと憶測だが、新たに行が追加されたらpagerの内容を更新させてやらないといけないのかも
503:495
12/01/11 13:43:58.61
>>502
すいません、下記のpagerです。
URLリンク(tablesorter.com)
Googleで調べてみましたが、pagerの内容の更新が分かりませんでした。
よろしくお願いします。
504:Name_Not_Found
12/01/11 13:45:40.87
>>500
jQueryよく知らんかったが非同期がデフォなんだな
jQuery使わんでもいいような気もするがそれでいいんじゃね
505:Name_Not_Found
12/01/11 13:48:36.72
>>503
まず10日は自力で調べなさい
それでもわからなかったら一旦諦めて別の方法を10日模索する
それでもダメなら聞きに来なさい
506:Name_Not_Found
12/01/11 13:51:52.81
jQueryってどこまで対応範囲広げるんだろう
AudioとかVideo関係も需要が高まればサポートするのかな
つうかjQueryだけの質問はもう専門スレに行って貰った方がいい気がする
今はほとんど機能してないけど時期まともになるでしょ
507:Name_Not_Found
12/01/11 14:09:21.32
>>500
なんか見てるだけでムズムズしてくるな
効率悪すぎ
508:Name_Not_Found
12/01/11 14:12:19.20
>507が本来0.1秒もかかる処理を0.01秒にしてくれるらしいよ
509:Name_Not_Found
12/01/11 14:16:51.79
・ 【誰か】jQueryのここがわからない 2【助けて】
スレリンク(tech板)l200
ム板にあった
510:Name_Not_Found
12/01/11 14:17:28.10
>>509
そこは削除依頼が出てる
511:Name_Not_Found
12/01/11 14:21:32.62
動作中のsetTimeoutとsetIntervalを全て削除する方法を教えてください
512:Name_Not_Found
12/01/11 14:22:06.30
jQueryはここで質問していいが、制作依頼は勘弁してほしいな
JavaScriptの基本を学ばずにjQueryに入って質問する人はとか
513:Name_Not_Found
12/01/11 14:29:53.08
>>500は製作以来に入るのか?
過去にあった例だがanimateで一つの要素を順番に動かすのにsetTimeoutとsetIntervalを使ってるけど違和感感じての質問は良しと思うが
514:Name_Not_Found
12/01/11 14:31:39.06
だから答えたくない奴は黙ってればいいだろzk
515:Name_Not_Found
12/01/11 14:45:38.56
全員黙ってると質問がどうしてスルーされたのかわかんないんじゃない
516:Name_Not_Found
12/01/11 15:03:37.72
>>514
> zk
何もそこでズッコケんでもw
517:Name_Not_Found
12/01/11 15:06:32.80
>>503
こんなpluginあるんだいいなこれ
518:512
12/01/11 15:09:02.66 K19RhCSN
>>513
制作依頼はいいすぎだったかもしれないが、回答しても理解されずに質問がループ状態で質問者にその意図がなくても制作依頼になるパターンを懸念してる
>>500は制作依頼ではないが、このまま質問を続ければそうなる可能性はある
519:Name_Not_Found
12/01/11 15:13:26.44
>>500はいいだろ。>>503が酷い。
520:Name_Not_Found
12/01/11 15:35:44.24
>>500は俺もいいとおもうけど>>507みたいなののせいで泥沼っ・・・!泥沼っ・・・!状態に陥るんだなーと
521:Name_Not_Found
12/01/11 15:43:40.51
>>507はなんかレスしたいだけだろ
522:Name_Not_Found
12/01/11 15:44:12.85
jQueryCSSの質問で申し訳ないんですが、以下のコードで先行実装CSSのbox-alignやbox-packを使って
IEなどに対応させたいなどと思ってるんですが、どうもこのコードでやってもできないようなんですが
何か問題があるんでしょうか?
$(function(){
$('body').css({
'display':'box',
'box-align':'center',
'box-pack':'center',
});
$('#test').css({
'background':'#C00',
'width':'300px',
});
});
URLリンク(jsbin.com)
523:Name_Not_Found
12/01/11 16:02:55.12
jQueryでXMLの要素の値が.text()メソッドで取得できないのですが、
理由を教えて頂けないでしょうか。よろしくお願いします。
コードは以下のようなものです。
var xml = "<?xml version='1.0' encoding='utf-8'?>
<node>
<value>1</value>
<value>2</value>
</node>"
var text = $('value', xml)[0].text(); // Chromeでデバッグすると、そのようなメソッドはないというエラー
524:Name_Not_Found
12/01/11 16:06:21.08
>>500はスルーされてるんだかされてないんだかよくわかんねぇな
525:Name_Not_Found
12/01/11 16:10:34.56
>>500
だから俺はfor(){アジャックス}でいいんじゃねーの?と
たぶんこれ以上の方法は思いつかない。そして無いと思う。
526:Name_Not_Found
12/01/11 16:28:42.33
>>523
自己解決しました。
527:Name_Not_Found
12/01/11 16:34:30.97
>>523
[0]はjQueryオブジェクじゃなくなる。
var text = $('value', xml).eq(0).text();
528:Name_Not_Found
12/01/11 17:06:13.06
>>525
Deferred()使えば
529:Name_Not_Found
12/01/11 17:33:29.38
今回の例だとDeferred関係無いだろ
530:Name_Not_Found
12/01/11 17:42:31.58
えっ
531:Name_Not_Found
12/01/11 17:42:47.81
なに!?
532:Name_Not_Found
12/01/11 18:03:15.60
>>500
とりあえず、コードには問題はない
期待通りに動作するのならそれでいい
そもそもどんな挙動を期待しているのかはっきりしないので何とも答えにくいな
533:Name_Not_Found
12/01/11 18:04:42.90
Deferred()使ったりそれより早くできるんだったらそのサンプル程度に書いてやりゃいいのに
534:Name_Not_Found
12/01/11 18:17:15.87
Googleのplusone.jsを読み込むときに
<script src="URLリンク(apis.google.com)">{lang:"ja"}</script>
と記述されていますが、コード側で{lang:"ja"}はどのように読み込まれているのでしょうか?
普通に自分自身を読み込んでいるscriptタグを探して読み込んでるだけでしょうか?
535:Name_Not_Found
12/01/11 18:20:49.18
ソース追わないと分からないけど、取得方法はこんな感じ。
・SRCが固定だからスクリプト要素の集合から特定できる
・実行中に最後のスクリプト要素を参照する方法があるが、あれは不安定。
・いずれかの方法で取得してparseJson
536:Name_Not_Found
12/01/11 18:41:45.77
>>535
横からだけど不安定な理由を押して欲しい。
script[defer] の話?
537:Name_Not_Found
12/01/11 18:55:11.36
>>536
それもあるし、あの手のコードは一番最初に置かないといけないでしょ。
そんな制約がある以上>>535の前者の方法には勝てっこない。
それからブログパーツ全般の話になるけど、例えばスクリプトタグにIDを振ると
そのサイト上で一つのIDを占領してしまうことになる。これはもうひとつスクリプトタグを追加して
そこで var hoge_config={} みたいにしても結果は同じ。
話を戻して、+1 のコードなら俺はスクリプト全体の集合から固定のSRCを使って要素を特定する。
これならIDも変数も何一つ占領しないで済む。実際にGoogleが中で何やってるかは知らんけどね。
538:Name_Not_Found
12/01/11 18:57:12.16
いい忘れたけど、2つ目のスクリプトで関数を使う方法もある。
これもIDとか変数を使わないから安全。
<script>plusone.config({...});</script>
539:Name_Not_Found
12/01/11 19:00:55.24
jQueristerはいい加減目障りだから消えろよ
専用スレがあるだろ
540:Name_Not_Found
12/01/11 19:01:27.24
(function($) { /* 関数本体 */ })
この式が無名関数への参照を結果として返すとはどういう意味でしょうか?
541:Name_Not_Found
12/01/11 19:04:19.57
>>537-538
最後のスクリプトを参照するコードを一番最初に書かないといけない理由はないよ
setTimeout のコールバック関数内に書くような非同期処理は駄目だけど、スクリプトコード内のどこに書いても動く
それからscript要素のid属性は HTML4, HTML5 で認められてないのでブラウザ依存だね
542:Name_Not_Found
12/01/11 19:04:47.58
>>539
両方人を表す〇〇istと〇〇erを重ねるのって変じゃないか?
jQueristかjQuererでいいんじゃねーの?
543:Name_Not_Found
12/01/11 19:06:20.84
>>540
こういうこと
var f = (function($) { /* 関数本体 */ }); // 括弧はいらない
544:Name_Not_Found
12/01/11 19:07:18.44
>>541
ほんと?これの後に取得してみて。
document.body.appendChild(document.createElement("script") );
545:Name_Not_Found
12/01/11 19:07:43.35
このスレの住民は本当に他人のレスの細かいとこ突いて喧嘩仕掛けるの好きだな
質問じゃないレスはみんな無視すれば平和になるのに
546:Name_Not_Found
12/01/11 19:11:35.12
>>544
さすがにこれは揚げ足でしょ
最後から2つめの要素を取得すればいいってことは誰でもわかるし
547:Name_Not_Found
12/01/11 19:12:50.49
>>546
DOM操作なんて当たり前だし、モジュール分けしたスクリプトを読み込むとか日常茶飯事。
548:Name_Not_Found
12/01/11 19:13:53.75
>>545
つ 鏡
549:Name_Not_Found
12/01/11 19:15:55.94
あのコードは最初に置くというルールがないと成り立たない。ゆえ不安定と言われるんじゃないの。
550:Name_Not_Found
12/01/11 19:19:07.98
>>547
モジュール操作も順番を間違えると動かないはず
例えば、jQueryプラグインはjquery.jsを先に読み込まないといけないから不安定だといえる?
551:Name_Not_Found
12/01/11 19:24:16.07
>>541
HTML5ではいいんじゃない?
552:Name_Not_Found
12/01/11 19:24:17.22
jqueryっていうかjavascriptのライブラリ総合スレがあってもいいんじゃないかと思う
553:Name_Not_Found
12/01/11 19:24:39.20
src 先をハードコードして指定する方が不安定と思うけど。
554:Name_Not_Found
12/01/11 19:28:15.40
>>551
ごめん、HTML5ではid属性使えたね
URLリンク(www.whatwg.org)
555:Name_Not_Found
12/01/11 19:32:39.93
設計の問題と思うか、不安定と思うか、の違いじゃない?
いずれにしても「一番最初」でなくても動くね
556:Name_Not_Found
12/01/11 19:52:17.05
>>550
プラグインは本体の後に読み込むというルールがあるよね。それで、>>535の
後者の方法にも>>544で示すように最初に実行しないといけないというルールがある。
でも、>>541はそのルールが存在しないと言ってる。そのことに対して、反対したわけ。
そもそもプラグインは棚違いでしょ。
557:Name_Not_Found
12/01/11 19:58:17.44
付け足すけど、
>>535の後者はクロスブラウザでないコードを書くようなもんだよ。
スクリプトタグを動的に追加することを"揚げ足"だと言われたたけど、
そうしたコードが実行されることもあり得るんだから、その時にあのコードは
動かないことになる。
こうやって動かないケースが発生しうることが簡単に推測できるんだから
不安定と言われても仕方ない手法だと思うね。
558:Name_Not_Found
12/01/11 20:00:24.69 wnh1trwj
久々に見たら貼り方変わってたw
URLリンク(www.google.com)
559:Name_Not_Found
12/01/11 20:01:58.85
>>558
asyncだったらなおさら使えないな。
560:Name_Not_Found
12/01/11 20:17:22.09
>>557
それなら、URL を参照する方法はなおさら不安定だな。
561:Name_Not_Found
12/01/11 20:21:28.04
>>560
もちろん俺もSRCによる特定が不安定であることは十分承知してるが、
あの条件下でより安定な方法があるなら示してみて。
562:Name_Not_Found
12/01/11 20:23:26.27
>>561
「なおさら不安定」と言ってるんだから…
563:Name_Not_Found
12/01/11 20:26:41.37
>>562
先頭に配置するコードよりSRCによる特定の方が不安定ってことでしょ?
>>558を見ると未だにURL変わってないけどね。
それと、コードがキレイになる効果もあるんじゃない。好みの問題だけどねえ。
<script type="text/javascript" src="hoge">
{nane: "taro", city: "tokyo"} // 一つでまとまる。
</script>
もう晩御飯だ。いてきます。
564:Name_Not_Found
12/01/11 20:31:44.50
ブラウザのブックマークレットに入れてあるjavascriptで、
いまみているページが「空白のページ」で(URLになにもない初期状態の)
あるか判定したいのだけど、どうすればできますか?
location.hrefではどうもダメなようです。
565:Name_Not_Found
12/01/11 20:43:21.00
すべてのWeb板みてきたがjQuery専用スレなんてなかったぞ
566:Name_Not_Found
12/01/11 20:46:40.62
>>564
ブラウザは?
567:564
12/01/11 21:03:26.72
>>566
最新のSafari・Chromeでチェックしてます。
最新のIE・FF・Chrome・Safariは対応したいです。
568:Name_Not_Found
12/01/11 21:09:03.26
一般的には常識とされている、
真実は一つだけ
怒りは自然な感情
戦争・テロは無くならない
死刑には殺人の抑止力がある
虐められる側にも虐めの原因がある
自己チューな人間ほど自己愛が強い
などの間違いを解説中
感情自己責任論
569:534
12/01/11 21:22:53.04
>>535
普通に2つのscriptを使ったほうが良さそうですね。ありがとうございました。
570:Name_Not_Found
12/01/11 21:31:43.12
>>565
全部このスレで統合らしい
571:Name_Not_Found
12/01/11 21:32:14.41
>>534
質問と関係ないけど
こういうのはevalでパースしていいケースだよね
Googleさんがどうしてるかが気になるところだ
572:Name_Not_Found
12/01/11 21:36:33.55 wnh1trwj
>>564
document.URL=="about:blank"
でいけるかなーと思ったけど、空白ページの時
webkitはdocumentはあるけどdocument.URLは空っぽみたい
ので、こいつらを場合分けしてあげれば、まあまあ出来るんじゃないかな、と
573:Name_Not_Found
12/01/11 21:53:06.41
>>564
空白のタブのURIは標準化されてないから実装依存。
全ての実装を調べて場合分けするしかない。
if (uri === 'about:blank' || uri === 'chrome://newtab/') {
console.log('blank tab');
}
Opera 11.60 はコンソールが効かないのでよくわからん。
574:573
12/01/11 21:56:41.49
Opera は abount:blank でも新しいタブを生成できるが、Spped Dial はDOMを生成してないっぽいな
故に JavaScript で操作できない
575:Name_Not_Found
12/01/11 22:06:24.79
>>571
普通は JSON.parse か new Function を使うと思う
576:564
12/01/11 22:37:06.38
>>572
>>573
ありがとうございます。
標準化されてないっぽいなーと思ってたら、やっぱりですか。
nullやらundefinedでlocation.hrefチェックしてましたが、
意味がなさそうだったので。
ブラウザごとの仕様を調べなおしてみます。
あ、Operaは諦めますw
577:Name_Not_Found
12/01/12 00:02:17.90
>>575
JSONなら{"lang":"ja"}こう書かなきゃならんし
new Functionやscriptタグに読ませて実行するのはevalと大差ないよね
578:Name_Not_Found
12/01/12 00:20:02.22
>>576
opera関係者さんですか?ステマ乙です
579:Name_Not_Found
12/01/12 00:20:49.91
jQueryでHighslideみたいな拡大効果できるライブラリありますか?
「お前が作れ」っていうのは無し
580:Name_Not_Found
12/01/12 00:24:29.52
ベンダープレフィックスを指定して使うCSSプロパティを.cssで使う場合ってどうすればいいんでしょうか?(jQuery)
普通に-webkit-とか指定しても効かなかったんで何か方法があるのかなと思って聞かせてもらいました。
581:Name_Not_Found
12/01/12 00:38:34.93
jQuery の質問が多いのは、単に使用者が多いだけでなく、使用者の学習意欲が低いからなんだと思う今日この頃。
582:Name_Not_Found
12/01/12 00:41:26.36
>>580
-moz-aaaa => MozAaaa
-webkit-aaaa => WebkitAaaa
-o-aaaa =>OAaaa
-ms-aaaa =>MsAaaa
583:Name_Not_Found
12/01/12 01:08:04.52
>>582
ありがとうございます。
教えていただいてこんな事言うのも失礼なんですが、結果は得られませんでした…。
良かったらその情報が載ってるサイトなどがあったら教えていただきたいです。すみません。
584:Name_Not_Found
12/01/12 01:21:24.11
>>581
たぶん同一人物
585:think49 ◆bKk/qcAKuM
12/01/12 01:39:58.49
>>571
>>534の URLリンク(apis.google.com) には eval, Function, JSON の文字列が見られないので独自にパースしてるんじゃないでしょうか。
構文に制約を設ければオブジェクト初期化子は比較的短いコードで書けます。
URLリンク(gist.github.com)
(plusone.js はクオート付きのプロパティ名ではないようなので実際はもう少し短く書けるはず。)
>>577
new Function はグローバルスコープですので、eval よりは安全だと思います。
586:Name_Not_Found
12/01/12 01:52:05.83
>>583
URLリンク(www.w3.org)
587:Name_Not_Found
12/01/12 01:54:40.82
>>585
plusone.jsがまた別のスクリプトを呼び出すよ。URLは長いから書かないけど。
588:Name_Not_Found
12/01/12 01:58:13.73
>>580
URLは>>586なんだけど、lower camel case だから>>582は間違ってるね
-moz-hoge => mozHoge
-webkit-hoge => webkitHoge
-o-hoge =>oHoge
-ms-hoge =>msHoge
589:588
12/01/12 02:15:45.94
ごめん、やっぱ訂正
>>586も Media Queries を指してるからURL間違ってるね
正しいURLを探すのはめんどいんのでパス
590:Name_Not_Found
12/01/12 02:19:49.93
>>588
-の後は大文字だぞ、インスペクタ覗いてこい
591:583
12/01/12 02:21:15.47
度々ありがとうございます。
jQueryはCSS3プロパティ実装済みといっても結構気難しい所があるんですね…
Google使っていくら検索しても情報が少なすぎて参りました。
とりあえず今は公式で公開してるCSSHookを勉強してます…。
592:Name_Not_Found
12/01/12 02:32:54.60
>>585
「安全」の意味合いが違う気がする。
コードの汚染よりもセキュリティ面で問題視されてると思う。
593:Name_Not_Found
12/01/12 02:43:42.05
>>580,591
驚愕の事実。(GC16)
URLリンク(jsfiddle.net)
どういう確かめ方をしたんだ…。
594:Name_Not_Found
12/01/12 02:56:25.92
<input type="checkbox" name="lang0" value="PHP">PHP
<input type="checkbox" name="lang1" value="Perl">Perl
<input type="checkbox" name="lang2" value="Java">Java
for(var i=0 ; i<=2 ; i++){
obj = eval("document.form.lang"+i);}
で動きますが、
<input type="checkbox" name="lang[0]" value="PHP">PHP
<input type="checkbox" name="lang[1]" value="Perl">Perl
<input type="checkbox" name="lang[2]" value="Java">Java
のとき、
for(var i=0 ; i<=2 ; i++){
obj = eval("document.form.lang["+i+"]");}
で動きません。
eval("document.form.lang["+i+"]");が間違っていると思うのですが、
[と]で不具合が出ていると思うのですが、どうすれば動きますか?
595:Name_Not_Found
12/01/12 03:00:07.06
これは eval のちょーわるい見本w
596:Name_Not_Found
12/01/12 03:10:41.15
>>594
プロパティ名に角括弧を含むプロパティはドット記法では参照できない
document.form['lang[0]'] というように角括弧記法を使って文字列で指定しなければならない
そしてこの角括弧記法を使えばevalを使う必要はない
前者は document.form['lang' + i] 後者は document.form['lang[' + i + ']']
そもそも同じ種類のチェックボックスに違うnameを指定するのはなぜ
597:Name_Not_Found
12/01/12 03:11:00.13
無理やろ
598:Name_Not_Found
12/01/12 03:11:27.85
name 属性に [] 使うのって PHPer だよね。
JavaScript が本職じゃないにしても、その発想はないと思うぞ。
599:Name_Not_Found
12/01/12 03:18:49.03
>>594
obj = eval("document.form.lang["+i+"]"); は obj = document.form.lang[i]; と同じ
わざわざeval()で評価する意味がわからない
eval()が話題だからって無理に使わなくても
600:583
12/01/12 03:27:57.15
>>593
あぁぁあぁ…orz
完全に頭の悪い書き方してました・・。
かなりの勉強不足ですね。。本当にすみません、そしてありがとうございました。
$('#element').css({
"webkitBoxShadow":"0 0 10px #000",
});
601:Name_Not_Found
12/01/12 03:29:54.34
>>593
きっと「-webkit」で検索かけたんだろうな
Googleはハイフンから始まるワードだとそのワードを含めない結果を返すから
-webkit が含まれるページは、ほぼ見つけられないわけだ
602:583
12/01/12 03:33:35.16
いや検索するときはjQuery+vendorprefixなどで調べてました。
目的は、IEとかでまだ実装されてないCSSを実装させようと思ってたんです。
transitionとかアニメーションとかですね・・。
jQueryの1.4あたりでCSS3はそれぞれインプットされてるって聞いてたんで
603:Name_Not_Found
12/01/12 03:36:05.26
夜更かしは美容に良くないよー。
604:Name_Not_Found
12/01/12 09:12:17.62
グローバル変数ならwindow["name"]
ローカル変数ならarguments["name"]
で取得できるのですが
どうやら後者は一部の新しい環境では動かなくされているようで
ローカル変数でも前者のようにするにはどうしたらいいのでしょうか?
605:594
12/01/12 09:36:18.91
みなさまありがとうございました。。
チェックボックスの値を取得する方法を検索して試行錯誤してました。
そこにevalを使っていたものでして、evalは使いたくないので、
あとでevalを使わない方法を調べる予定でした。
606:Name_Not_Found
12/01/12 09:59:48.53
あほすぎる
607:Name_Not_Found
12/01/12 10:03:34.88
>>604
オレの知る限り、ローカル変数のベース(グローバル変数ならグローバル)オブジェクトに
アクセスする手段はない。ローカル変数の場合、前者のようなアクセスはできない。
arguments["name"]は何かの勘違いか?
昔はargumentsオブジェクトからローカル変数にアクセスできてたのか?
608:Name_Not_Found
12/01/12 10:14:09.36
>>604
eval(name)
>>607
できてた
609:Name_Not_Found
12/01/12 10:22:40.63
今でもバージョン指定すれば使えるよ
610:Name_Not_Found
12/01/12 13:23:18.77
evalを濫用すると任意のスクリプトを実行されてしまうのは
理解できましたが、そのことがなぜ一意に危険視されるのかわかりません
DBなどにアクセスする可能性がある場合以外に
クリティカルな危険性があるものなのですか?
611:Name_Not_Found
12/01/12 13:46:19.04
>>610
個人でやるなら好きにしろ。必要ないけどなw
クライアントが別にいるならフォーマットを厳守しなければ、
意図しない動作が起こることを告げておけ
仕事なくなるけどなw
612:Name_Not_Found
12/01/12 14:55:53.27
JavaScript エンジンそのものに特定コードに対する脆弱性が存在したり、
Ad○be 製品の様な脆弱性だらけのプラグインに不正なファイルを読み込まされたり、
定期的にページ内の入力監視されて外部に送信されたり、Cookie 盗まれたり。
eval はインタプリタを呼び出すわけで、JavaScript 全般にまつわる脆弱性を伴う、という話。
jQuery にもちょっと前まで、XSS の脆弱性があったから、古いバージョン使ってると
場合によってはそのページも危ない (レアケースだと思うけど)。
613:610
12/01/12 15:00:20.01 r5y39zoq
>>611
自分は作り手ではなく、ただの経理屋なんです
週末に個人的に勉強してるレベルです
私が知るかぎり、evalをユーザに使われることでサーバが脅威にさらされるのは
いわゆるウェブサービスのような、サーバサイドと連動するごく一部のウェブページであって
その他大多数を占める静的なページでは、危険と言うほどの問題はないのではないかな
と思っているのですが、やっぱり素人の安易な発想なんでしょうか
また、例えば先述のGoogle+1のJSONをパースするような場合でも
(function(){
var json = /*<script>要素内のJSON文字列*/;
var dat = eval(json);
/* APIに向けてdatの内容を投げる */
})();
と書いたところで、このevalにユーザスクリプトが触れることが出来るものですか?
614:610
12/01/12 15:02:34.46 r5y39zoq
>>612
レスありがとうございます
> 定期的にページ内の入力監視されて外部に送信されたり、Cookie 盗まれたり
これは、例えば私が悪意あるスクリプトを実行したとして
私以外のコンピュータの入力監視やCookieの盗聴ができてしまう
ということでしょうか?
615:Name_Not_Found
12/01/12 15:02:51.40
>>587
それ見てみるとコード内にevalは存在するね。見た感じJSON関連かな。
肝心の>>534のパラメータをどうやって読んでるかだけど、
多分これ。
try{n=(new Function("return ("+g+"\n)"))()}catch(p){}
>>575ちゃんのエスパーした通りnew Functionのようです。
evalよりはマシって事なんですかね。
616:Name_Not_Found
12/01/12 15:10:43.26
>>613
Webが与える脅威なんか本島に脅威と言えるものは何もないから何でも使えばいいよ
617:Name_Not_Found
12/01/12 15:14:25.89
>>614
入力監視や Cookie を盗む行為なんかは、ブラウザのページ毎に
行われるものだけど、「悪意あるコードの内容」如何では、
Gumblar みたいに、それこそ何でも実行されてしまったり。
618:Name_Not_Found
12/01/12 15:32:53.76
>>472-473
ありがとうございます。
以前から変わってないみたいで、いまだに直接アクセスは出来ないんですね。
googleにまだバレてないすごいトリッキーな事をしているならともかく
こんな簡単な方法がずーっと使われてるんだから、公式でアクセス出来る手段提供して欲しいなー
619:610
12/01/12 16:54:22.82 r5y39zoq
>>617
つまり、書いたJS自体には問題がなくても
それとは全く別の方法でサーバに侵入され、Flashなどの別のコンテンツを書き換えるなどの
手法により攻撃性を持ったプログラムが、そのJSを利用する可能性がある
つーことですかね
なんか話が壮大になってしまいましたね
みなさん色々ありがとうございました
また少し勉強してわからないことがあったら質問させて頂きます
620:Name_Not_Found
12/01/12 17:04:05.49
>>614
cookieを盗“聴”ってのも変だな。
621:Name_Not_Found
12/01/12 17:17:07.04
壮大って言っても、実際にあったことで、それも長期に渡って大流行したことなんだよな。
622:Name_Not_Found
12/01/12 19:02:32.92
>>615
マシとかじゃなくてevalは将来削除されたり
一部の環境で非サポートになるかもしれないから
623:604
12/01/12 19:06:21.44
すみませんevalはできれば使いたくないのですが
他に方法はないでしょうか?
624:Name_Not_Found
12/01/12 19:35:44.54
>>622
どこソース?
ECMAScript5 の strict mode でも非推奨にはなってないけど。
625:Name_Not_Found
12/01/12 19:37:56.96
>>622
うそつけ。
一部の環境で動的なコードが制限されるとしたらnew Functionだって同じ事だろ。
626:Name_Not_Found
12/01/12 19:46:30.47
new Functionと同じってことはない。スコープの差はデカい。
627:Name_Not_Found
12/01/12 20:39:54.74
setTimeout に文字列としてコードを渡したり、innerHTML 内に属性としてコードを書いたりできるし。
仮に eval だけ廃止しても意味ないよな。
628:Name_Not_Found
12/01/12 20:51:06.01 g3N5dQ30
IE9ではtry-catchで例外処理する仕組みに仕様変更はありますか?
javascriptの問題なのかわからないのですが
ブラウザをIE8からIE9に変更したところ例外処理が実行されるべきところで例外処理されず
ActiveXが正常に動かなくなります。
ActiveXコントロールのプロパティに値を設定するのですが、
範囲外の値が設定されたらThrowErrorでエラーを返すようにしています。
例えば値が0/1以外のときにエラーを返すプロパティで以下のようにすると
IE8までは例外発生のダイアログが出ますが、IE9では出ません。
try
{
OCX名.プロパティ名=2;
}
catch(e)
{
alert("例外発生");
}
どなたか、対処方法をご存知でしたら教えてもらえないでしょうか。
629:Name_Not_Found
12/01/12 21:10:21.84
>624 勉強しろ
>625 実装において大きく違う
630:Name_Not_Found
12/01/12 21:18:01.45
ソースを訪ねて、返ってきた言葉が「勉強しろ」だよ…
631:Name_Not_Found
12/01/12 21:19:59.07
>>604
arguments['a'] というのは聞いたことないね
var a = 1;
console.log(a, window.a, window['a']); // 1, 1, 1
// a, window.a, window['a'] は同じグローバル変数
var b = 1;
function A(a) {
var b = 3;
console.log(a); // 2
console.log(arguments['a']); // undefined
console.log(arguments[0]); // 2
console.log(b); // 3
console.log(window.b); // 1
// a, arguments[0] と b はローカル変数 window.b はグローバル変数
// arguments['a'] は未定義の変数
}
test(2);
>>623
いま eval() で使っているコードを書いてくれないと何のアドバイスもできない
632:Name_Not_Found
12/01/12 21:21:46.21
>>623
どんなコードなのか、なぜevalを使うのか教えてくれ
じゃないとこっちもわからん
633:Name_Not_Found
12/01/12 21:27:09.14
>>622 は知ったか
634:Name_Not_Found
12/01/12 21:31:39.01
jQueryプラグインのダウンロード方法が分かりません。
ここから URLリンク(archive.plugins.jquery.com)
ここに URLリンク(github.com)
移ったのでしょうか?プラグインの探し方からさっぱり分かりません。
どなたか教えて頂けないでしょうか。よろしくお願いします。
635:Name_Not_Found
12/01/12 21:52:49.72
>633
そう思いたい気持ちは分かるよ
反論したくても知識がなくてできなくて悔しいね(笑
636:Name_Not_Found
12/01/12 21:55:48.97
>>534
ついでにわかったんで書いとくけど、
script要素を総当りしてsrc属性で照合する方法をとってましたわ
637:Name_Not_Found
12/01/12 21:57:34.79
>>631
MDN-arguments
JavaScript 1.1 および JavaScript 1.2 で利用可能だった次の機能は削除されました。:
関数の各ローカル変数は arguments オブジェクトのプロパティです。
たとえば、もし関数 myFunc が myLocalVar という名のローカル変数を持っていたなら、その変数を arguments.myLocalVar として参照できます。
638:Name_Not_Found
12/01/12 22:06:51.25
>>635
なんだ妄想だったのか。
あんまりネット上で間違った知識広めんなよ。
639:Name_Not_Found
12/01/12 22:32:48.39
>>635
最低だなw
640:Name_Not_Found
12/01/12 22:35:39.80
arguments.calleeと勘違いしてるに1票
641:Name_Not_Found
12/01/12 22:35:50.45
>>637
>たとえば、もし関数 myFunc が myLocalVar という名のローカル変数を持っていたなら、その変数を arguments.myLocalVar として参照できます。
「arguments.myLocalVar が使えるという前提」で話すけど、その arguments.myLocalVar はどこから参照したいときに使うのかな?
function myFunc() {
var myLocalVar = 1;
arguments.myLocalVar; // ここだと myLocalVar だけでいい気がする
}
function myFunc2() {
arguments.myLocalVar; // ここから myFunc の変数が使える??
}
function myFunc3() {
var myLocalVar = 2; // 別の myLocalVar を宣言して
}
function myFunc4() {
arguments.myLocalVar; // この場合だと myFunc と myFunc3 のどちらが呼ばれるのか?
}
myFunc.myLocalVar; // もしかして、こういう感じの指定なのかな?
642:Name_Not_Found
12/01/12 22:44:18.66
ちなみに >>636 も嘘。
643:Name_Not_Found
12/01/12 22:47:14.97
>>641
こうじゃん?
function myFunc() {
var myLocalVar = 1;
myFunc2(arguments);
}
function myFunc(args) {
alert(args.myLocalVar);
}
644:Name_Not_Found
12/01/12 22:50:33.72
よく考えたら >>643 も無意味。
function myFunc() {
var myLocalVar = 1;
return arguments;
}
function myFunc2(args) {
alert(args.myLocalVar);
}
var args = myFunc();
myFunc2(args);
645:Name_Not_Found
12/01/12 23:25:35.58
eval使ったらJSが本来持つ危険性より高い危険性が生まれると勘違いしてるやつ多そうだな
上の質問の奴もそんな感じだろ。eval関係ない話になってるのに気づかずに納得したっぽいな
646:Name_Not_Found
12/01/12 23:34:27.31
検索フォームに文字を入れてフォーム下ににょきにょきって感じで結果出てくるようなことってjQueryで可能でしょうか?
可能であればサンプル等あるサイト教えてください
よろしくお願いします
647:Name_Not_Found
12/01/12 23:36:02.30
jQueryUIとか
648:Name_Not_Found
12/01/12 23:51:26.86
var a1 = 1;
var a2 = 2;
var a3 = 3;
forを使って a1~a3の中身をalertする方法をおしえてくだしあ
偉い人
ルールが分からん
これじゃ出ないんですけど
for(var i=1;i<=3;i++){
alert(a.i);
}
649:Name_Not_Found
12/01/13 00:03:20.14
そこでevalの登場だ
まぁ普通なら配列かオブジェクト使えとなるけど。
for (var i = 1;i<=3;i++) {
alert(eval('(a'+i+')'));
}
//配列バージョン
var aAry = [1,2,3],
i,
l = aAry.length;
for (i = 0;i < l;i++) {
alert(aAry[i]);
}
// 配列の別バージョン
aAry.forEach(function (item) {
alert(item);
});
650:Name_Not_Found
12/01/13 00:04:53.88
evalなんていらねぇ
var a1 = "1";
var a2 = "2";
var a3 = "3";
for (var i=1; i<4; i++)
alert(window["a"+i]);
651:Name_Not_Found
12/01/13 00:12:31.58
>>650
a1~3の定義場所がglobal以外の場合はどうするの?
652:Name_Not_Found
12/01/13 00:22:41.28
>>648-651
var a1 = '1';
var a2 = '2';
var a3 = '3';
function test() {
for (var i = 0, m = arguments.length; i < m; i++) {
alert(arguments[i]);
}
}
test(a1); // "1" をアラート
test(a1, a2, a3); // "1" "2" "3" をアラート
653:Name_Not_Found
12/01/13 00:23:00.53
>>650
本来は配列を使うべきだが、この場合はeval系統の出番だな。
(function(){
var a1 = 1, a2 = 2, a3 = 3;
// hmhm...
})():
654:Name_Not_Found
12/01/13 00:32:58.69
いや、そもそも、配列使うべきだから。
実装がおかしいから。
655:Name_Not_Found
12/01/13 00:35:38.98
>>651
ぐろーばる以外?
そんな時は配列使うんじゃねーか。当たり前だろ?
656:Name_Not_Found
12/01/13 00:35:38.94
じゃあじゃあぼくはnew Functionで!
657:Name_Not_Found
12/01/13 00:38:59.64
>>654
配列いがいにないのかえ?
他の言語だったらできるんだが(・´x`・)くそやん
658:Name_Not_Found
12/01/13 00:40:42.15
>>657
配列使って実装できないお前が(`ェ´)ピャー
659:Name_Not_Found
12/01/13 00:42:47.87
お前らありがとうぴゃーヽ(`Д´)ノ
660:Name_Not_Found
12/01/13 00:43:46.83
>>652
argumentsは非推奨になったよ
661:Name_Not_Found
12/01/13 00:50:36.93
>>660
argumentsじゃなくてarguments.calleeだがな
662:610
12/01/13 00:59:12.51 2oiSMuyR
>>645
JS関係ない話になっちゃったことは理解しましたよ
サーバに接点がないのなら、どんなにズルズルな、たとえば
<textarea id="ta"></textarea>
var ta = document.getElementById("ta");
eval(ta.value);
なんてこと書いちゃったとしても
そのブラウザのなかで出来ることしかできない
て、理解であってますよね?
663:Name_Not_Found
12/01/13 01:01:55.59
ばかばっか
664:Name_Not_Found
12/01/13 01:09:14.78
>>662
あってる。ブラウザでJSができることしかできない。
665:Name_Not_Found
12/01/13 01:10:04.15
うまく説明できないけど、邪悪で悪魔でやばいんだよ!
きっと
666:Name_Not_Found
12/01/13 01:11:34.89
>>622
セキュリティーホールも知らないの?ブラウザのページ上でしか出来ないはずが、
それを通り越すことがあるんだよ。>>664みたいな意見は鵜呑みにしないほうがいい。
667:Name_Not_Found
12/01/13 01:18:59.93
>>666
どういう理屈でevalがJSができることを超えてセキュリティホールになるんだよw
evalはJSを超越しちゃうのかよwすごいなw
668:Name_Not_Found
12/01/13 01:19:33.20
> それを通り越すことがあるんだよ
だからそれを具体的に説明してみ、セッションハイジャックとか言ったらお前にeval語る資格なんてない
669:Name_Not_Found
12/01/13 01:20:35.98
>>667-668
javascript 脆弱性で調べてみたら?浅はかにも程がある。
670:Name_Not_Found
12/01/13 01:23:07.99
>>669
だからそれはJSの脆弱性だろw evalじゃねーよw
671:Name_Not_Found
12/01/13 01:27:10.13
>>670
>>662は手段はどうであれ意図しないコードを実行できる仕様にある訳でしょ。
それでもブラウザ上でしかコードは動かないから大して問題じゃないと。
その段階でevalがどうとか呆れる。というか、相手することないね。すまんよ。
672:Name_Not_Found
12/01/13 01:29:04.53
>>662
> そのブラウザのなかで出来ることしかできない
だから安全、ということにはならないけどね。
673:Name_Not_Found
12/01/13 01:32:47.48
>>671
いやいや・・>>662で意図しないコードを実行できるだって?
コードをコピペしてもらって実行してもらうことが”意図しない”なら別だが、
どうやって見知らぬ誰かに実行させるのか実に興味深い
javascript eval 脆弱性でググってとくまるさんのサイトが出たがこれはサーバーサイド側の問題。
URLリンク(d.hatena.ne.jp)
674:Name_Not_Found
12/01/13 01:35:22.02
>>673
>>662を読み直したら。
675:Name_Not_Found
12/01/13 01:36:06.13
ウェブの人は基礎が吹っ飛んでる人が多いからスレの流れがこうなるのも仕方ない。
676:Name_Not_Found
12/01/13 01:37:43.83
>>674
サーバーサイド側で、たとえば
<textarea id="ta"><?php echo($_GET["code"]) ?></textarea>
こう書かれてたら話は別だぞ?
今は
<textarea id="ta"></textarea>
これだけの話をしてる
677:Name_Not_Found
12/01/13 01:42:09.42
>>676
確かにレイヤーを分けて考えれない吹っ飛んだ人が多い
678:Name_Not_Found
12/01/13 01:42:11.19
>>676
>>662は「仮に次のような例で任意のコードを実行できるとしても、
ブラウザ内で動くだけだから大きな問題ではない」って言ってるよね。
このどこを掻い摘んで eval を利用して外部から任意のコードを埋め込むってなるわけ。
問題は任意のコードが実行されることなんだから、その段階でevalがどうとか言ってると、なんか頭おかしいみたいだよ。
値を埋め込む方法はあるけども、それは今回の質問とは関係ないよね。まったく勘違いしてるよ。
679:Name_Not_Found
12/01/13 01:42:18.69
evalを使いたいひとはevalで何がしたいのさ。それはevalにしか出来ないことなのか?
>>594,649のコードを読むと頭の弱い人なんだなと思う
680:Name_Not_Found
12/01/13 01:45:14.05
>>676
evalの是非を問うてるんじゃなくて意図しないコードが動くことについての質問だろ。
681:Name_Not_Found
12/01/13 01:47:44.84
>>678
javascript:スキームでも、コンソールでも任意のコードが実行できるし
HTMLファイル作ってコード書いたらいくらでも任意のコードが実行できますが、問題ですか?
これでも伝わらないなら読んでね。
URLリンク(d.hatena.ne.jp)
682:Name_Not_Found
12/01/13 01:50:20.35
>>681
悪いけどこれ以上は無理だわw分かってくれるよう説明したつもりなんだけどね。
683:Name_Not_Found
12/01/13 01:54:49.52
>>682
自分ははまちちゃんの考えに納得して基準に使ってるから
合わせて「セキュリティ過敏症」っていう記事も読むといいよ。
これでも、昔はeval死ねとか思ってたけど。
684:Name_Not_Found
12/01/13 01:59:00.51
すでに話はJavaScriptの脆弱性に移ってるんじゃないのか?
たいした危険性ないよね?
685:Name_Not_Found
12/01/13 02:01:03.31
移ってない
686:Name_Not_Found
12/01/13 02:06:58.39
自分のサイトがDDoS攻撃される可能性があるってことだよ
687:Name_Not_Found
12/01/13 02:09:31.77
横レス。
>>681
記事読んだけど、セキュリティについて全く認識不足だな。
688:Name_Not_Found
12/01/13 02:10:17.35
evalとか気にして縮こまるよりは面白い物作ろうよってこと
商用サイトとか作ってる上級な人はこんなとこ見てないし。え?みてる?
689:Name_Not_Found
12/01/13 02:12:55.89
気持ち悪い
>>681はどこの信者だよ
690:Name_Not_Found
12/01/13 02:13:43.08
>>688
スレチかと思われ
691:Name_Not_Found
12/01/13 02:15:11.78
>>687
初心者向けの記事だから足場は別の人がちゃんと管理してるのが前提だよ
鯖のrootもってるような人向けじゃない
692:Name_Not_Found
12/01/13 02:17:00.41
>>691
JavaScriptの話じゃないのか?
693:Name_Not_Found
12/01/13 02:22:21.81
脆弱性の話じゃなかったのか>>669
694:Name_Not_Found
12/01/13 03:02:26.14
>>641
どこからというより、
変数名そのものを値として扱えるってことじゃね。
function myFunc() {
var myLocalVar = 1;
var varName = 'myLocalVar';
arguments.[varName];
}
みたいな。
コード追いかけるの大変だろうな…
695:Name_Not_Found
12/01/13 03:10:07.41
>>693
>>110-693までのeval()の話題まとめ
>>110 :Name_Not_Found:2012/01/09(月) 16:23:50.92 ID:???
>「evalはどんな事があっても絶対に絶対に使うな」ときつく怒られたのですが
>調べて見ても何故そんなに使ってはいけないのかよくわかりませんでした
eval()を使ってはいけない理由は何かの質問がくる
>>113 :Name_Not_Found:2012/01/09(月) 16:29:31.43 ID:???
>evalを使うとXSS脆弱性が高まるから
脆弱性うんぬんの話題はここから
>>114 :Name_Not_Found:2012/01/09(月) 16:31:50.56 ID:???
>Ecmascript 5になるとstrictモードではeval使えなくなるからねー
正しくは、Strictモードだとeval()で作成した変数などはeval()内でのみ有効であり、その後の処理には反映されない制限がある。それと、これに関連する>>149と>>150のレスは嘘
>>129 :Name_Not_Found:2012/01/09(月) 16:55:59.14 ID:???
>電卓作るときとかeval使わないと厳しい
これに対して「eval()でやらなくても出来る」等のレスがつく
>>137 :Name_Not_Found:2012/01/09(月) 17:09:52.62 ID:???
>じゃあやってみろよ
>eval使わずにinput以下の計算式いれて答えさせるんだろ?
>((1+2+3)*2+19*(30*2))/2
eval()じゃないと出来ないと反発。>>138-145くらいまで出来る出来ないの話題で盛り上がる
>>147 :Name_Not_Found:2012/01/09(月) 17:14:18.01 ID:???
>evalが不要なら何でevalは実装されているの?
>何でJavascriptの仕様からevalが削除されないの?
なぜか「eval()でやらなくても出来る=eval()の実装は不要」と勘違いのレス。ここから>>147-388まで、ほぼeval()についての脆弱性か。eval()が不要か必要かの話題しかない
696:Name_Not_Found
12/01/13 03:16:13.32
>>694
>>637にも書いてあるけど、下のURL先にはこう書いてある
URLリンク(developer.mozilla.org)
>たとえば、もし関数 myFunc が myLocalVar という名のローカル変数を持っていたなら、その変数を arguments.myLocalVar として参照できます
697:Name_Not_Found
12/01/13 03:18:07.67
今になって >>142 で笑ってしまったじゃないか。
698:Name_Not_Found
12/01/13 03:28:38.99
>>696
arguments.myLocalVar
は
arguments['myLocalVar']
と同じだろ?
699:Name_Not_Found
12/01/13 07:08:17.32
>638=639
自分が納得できなければとことん人をおちょくる頭の悪い奴だな
たぶんアスペか何かだろうからもう触らんでおこう
700:604
12/01/13 07:25:37.60
>>698のように変数名の文字列から変数を特定するのを
ローカル変数でもやりたいのです
701:Name_Not_Found
12/01/13 08:51:59.86
700になりました。テンプレに関する大規模な変更の提案あれば今どうぞ。
702:610
12/01/13 08:52:16.79 2oiSMuyR
>>681
おはようございます
文章の書き方が悪かったかも知れません
>>662で「サーバに接点がないのなら」と書いたのは
サーバ側にクライアントサイドプログラムに対してのゲートウェイが用意されてないのなら
的な意味です
どれだけJSで暴れた所で、影響を及ぼせる範囲は
その実行者のコンピュータの中だけですよね?
703:Name_Not_Found
12/01/13 09:02:54.28
サーバ側に何も用意されていない→完全に静的なHTMLのみのサイトということ。
今はそういうサイトは非常に少ないんじゃないかなと。
704:Name_Not_Found
12/01/13 09:23:32.85
>>701
evalの話題禁止
705:Name_Not_Found
12/01/13 09:24:26.30
>>702
暴走したJSで別の脆弱性を付けば被害はもっと広くなる可能性はある
まあ別にそれはプログラマーが危惧しなくてもいいこと
ブラウザやその他のソフトの仕事だし気にしてもどうしようもない
ブラウザ外アプリの形のJSなら多少は責任あるかも
706:Name_Not_Found
12/01/13 09:31:36.05
>>700
どうしてそんな変な実装なの?
配列とか、ハッシュとか使って組む事できないの?
707:Name_Not_Found
12/01/13 10:04:37.15
>699
そう思いたい気持ちは分かるよ
反論したくてもソースがなくてできなくて悔しいね(笑
708:Name_Not_Found
12/01/13 10:24:55.27
>>701
テンプレにデバッガの使い方をいれろ!
709:Name_Not_Found
12/01/13 10:48:53.44
それは提案とはいわない
710:Name_Not_Found
12/01/13 11:09:19.18
>>703
フリーのレンタルサーバーなんかは全部そうじゃね?
711:Name_Not_Found
12/01/13 13:13:37.17
それでやっぱり、テンプレの「提案」は具体的なテンプレ用のレス案として出してくれないと
採用も却下も議論が難しいので、そこはよろしく。そういう検討方法以外の検討方法がいいと
いう方いらしたら、とりまとめに出てきていただけるとうれしいですけどね。
712:Name_Not_Found
12/01/13 15:34:18.33
デバッガ以前にエラーメッセージも見てなさそうな質問があるから
各ブラウザのエラーの確認方法書いといて。
713:Name_Not_Found
12/01/13 15:46:40.82
>>712
だからテンプレ文案にしてくれないと検討できないって。まずは各ってどのブラウザとどの
ブラウザよ。どれくらいどういうふうに書けばいいの? 昔のテンプレにはMozillaのエラー
コンソールの出し方載ってた時期があった気がするけど、なんで無くしたんだっけね?
714:Name_Not_Found
12/01/13 15:49:54.96
>>1 の【エラーメッセージ】のとこを次のように差し替えるくらいでどお。
【エラーメッセージ】ブラウザのエラーは必ず確認し、有無および有ならメッセージ内容を書く。
715:Name_Not_Found
12/01/13 15:52:27.60
関連スレに↓を入れてここを本スレとして乗っ取ってしまうかどうかの議論を
eval論争とかは別のところでやりたいよねってことで
JavaScriptスレ
スレリンク(tech板)
716:Name_Not_Found
12/01/13 16:18:30.00
それいいなあ。「eval論争のような言語自体の思想に関わる話題はJavaScriptスレへ」とか。
EcmaScriptスレとかもあるんだけどどうするかね。
717:Name_Not_Found
12/01/13 16:31:52.32
eval議論禁止というより議論の仕方な気がするなあ
煽り禁止とか
718:Name_Not_Found
12/01/13 16:39:49.80
>>715
そこは今のところ要らない気がするな
質問→スレ違いの話題ばかりでスレの存在意義がまともに確立できてない
スレを立てた人は確か「ここよりも気軽にJavaScriptの話題が出来る場所が欲しい」だったと思うけど、
今は多分ここにいるんじゃないかな
719:Name_Not_Found
12/01/13 16:47:22.93
とりあえず、>>5,20だけまとめた。
URLリンク(codepad.org)
720:Name_Not_Found
12/01/13 16:50:13.63
>>1のテンプレが全く使われてない。
回答者が「テンプレつけてね」と指摘しないならなくしてもいいんじゃないかと思う。
残すなら守って貰う何かが必要かな。良い文案はまだ思いつかないけど…。