+ JavaScript の質問用スレッド vol.121 + at HP
[2ch|▼Menu]
[前50を表示]
300:Name_Not_Found
14/11/11 01:02:37.92 .net
>>295
昨日だったか一昨日だったかは出したんだけどね。
今回は反論を叩きのめそうと思ったので
あえて隠した。どっちにするかは気分次第。

301:Name_Not_Found
14/11/11 01:07:35.11 .net BE:734417802-2BP(6567)
sssp://img.2ch.sc/ico/nida.gif
>>291
ありがとう
なんとなく?読んでみたけど今のところ解決策がない感じ・・・かなぁ

302:Name_Not_Found
14/11/11 01:08:11.93 .net
ほんとぱたっとやんだなw
やっぱりinnerHTMLを否定していたのは一人だったか。
俺も寝るから、またあしたな。

>>297
どうやらバグみたいだから
一つ前のバージョンに戻すとかしてみればいいんじゃない?

303:Name_Not_Found
14/11/11 01:14:20.91 .net
一人で頑張るならID出したほうがいいぞ
自演を疑われるぐらいなら初めからID出したほうが信用される
後は各自で判断するだろうさ

304:Name_Not_Found
14/11/11 01:17:19.19 .net
ようやく向こうのスレが収束したわけだが

> function escapeHTML(str) {
> return str.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
> }
これは酷いな
XSSが発生するコードを披露するとは

305:Name_Not_Found
14/11/11 01:20:47.18 .net
>>300
もしかしてシングルクォートの話してる?

URLリンク(d.hatena.ne.jp)

> 私が、シングルクォート「'」もエスケープ対象に加えているのは、
> 属性値をシングルクォートで囲むケースが少なからず見受けられるからで、
> かならずダブルクォート「"」で囲むように徹底されていれば、このガイドラインは必要ありません。

まあ、あったほうがいいよね。

306:Name_Not_Found
14/11/11 01:24:01.42 .net
Underscpreはこうらしいね。 これだけやっておけば大丈夫みたい。

URLリンク(stackoverflow.com)
There's also _.escape in Underscore, that does it like this:

// List of HTML entities for escaping.
var htmlEscapes = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
"'": '&#x27;',
'/': '&#x2F;'
};

// Regex containing the keys listed immediately above.
var htmlEscaper = /[&<>"'\/]/g;

// Escape a string for HTML interpolation.
_.escape = function(string) {
return ('' + string).replace(htmlEscaper, function(match) {
return htmlEscapes[match];
});
};

307:Name_Not_Found
14/11/11 01:29:47.87 .net
訂正版はこれでいいのかな。

function escapeHTML(str) {
return str.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/'/g, "'&#x27;").replace(/\//g, "'&#x2F;");
}

308:Name_Not_Found
14/11/11 01:31:55.47 .net
>>300
あえてこちらには書き込まなかったのになぜこっちにコピペするんだよ

>>302
明らかに足りない
「ライブラリで使っているから大丈夫」という信者判断はいい加減に卒業しろ
しかも、「大丈夫みたい」とは何も理解してないだろ

309:Name_Not_Found
14/11/11 01:32:57.68 .net
>>304
「足りない」っていうぐらいなら
何が足りないのかいいなよ。
難癖つけてるようにしか見えないからさ

310:Name_Not_Found
14/11/11 01:34:19.23 .net
>>304
> あえてこちらには書き込まなかったのになぜこっちにコピペするんだよ

こっちの続きだから

> 明らかに足りない

じゃあ、足りない文字は何?
そいれ付け加えるだけなんだからさ

311:Name_Not_Found
14/11/11 01:35:41.73 .net
>>304
あなたよりも、徳丸さんの方を信じますよw

徳丸さんは / はエスケープしてないね。
たしかに要らないように思える。

312:Name_Not_Found
14/11/11 01:37:57.87 .net
仕様を読めば分かる事を一々聞くな
仕様も読めない奴が一人前な口を叩くな

この後の展開は読めてる
「知らないんだろ?じゃあ、問題ないってことだな」
煽ってもおまえに教える気は全くないがね

313:Name_Not_Found
14/11/11 01:38:10.16 .net
本当、文句だけ言って自分の意見は書かないクズはなんなんだろうな

314:Name_Not_Found
14/11/11 01:39:59.82 .net
それじゃだめ

なんで?

いいやだめだめ

だからなんで?

だめったらだめ

駄目だこいつ話にならねぇw

315:Name_Not_Found
14/11/11 01:41:50.95 .net
仕様によると最低限のエスケープはこれだけらしい。

URLリンク(d.hatena.ne.jp)
> W3CのHTML4.01の仕様を見ると、〜略〜すなわち、最低限のエスケープだと以下のようになります。
>
> エスケープ対象項目 エスケープ対象文字
> 要素内容(一般のテキスト) 「<」、「&」
> 属性値 「"」、「>」、「&」

これ+ブラウザのバグ対策か。

316:Name_Not_Found
14/11/11 01:44:48.21 .net
>>308
> この後の展開は読めてる
> 「知らないんだろ?じゃあ、問題ないってことだな」

普通にその通りの展開だよw

でも先が読めてても、対策出来てないんじゃ
片手落ちだけどね。


お前がパンチを出してくるのは読めていた!(勝ったつもり)
そしてパンチで殴られる。(笑)
先が読めてても、殴られる例。

317:Name_Not_Found
14/11/11 01:46:38.58 .net
先が読めてるくせに、その先を行けないっていうのは、
言い返せないからってことだと思うw

そういう反論するのはわかっていたが、
その反論の反論はできないってことだから。

318:Name_Not_Found
14/11/11 01:51:25.80 .net
なんか向こうでこういうこと言ってる奴がいるわw

> >>132が向こうのスレにコピペされてるんだが、誰がやったんだ?
> 迷惑だから止めてくれ

こっちの話を移動させようとしてるの見え見えだってのに
見苦しいやつだなw

319:Name_Not_Found
14/11/11 08:02:27.92 .net
innerHTML否定厨が完全論破されててワロタw

320:Name_Not_Found
14/11/11 08:30:42.48 .net
replaceの回数だけ文字列を全部読んでいてワロタw

321:Name_Not_Found
14/11/11 09:01:58.11 .net
>>316
ベンチマークするとそっちのほうが
速かったりするのはなんでなんだろうか?

キャッシュの関係なのかな?

ループが単純=CPUの1次キャッシュに入りきる
ループが複雑=CPUの1次キャッシュに入りきらない

322:Name_Not_Found
14/11/11 09:44:07.85 .net
>>288,289

固定の文字列って何?ハードコーディングって用語も知らないの?
文字列は文字列であり変数に入れようが入れまいが代わりはない
ハードコーディングされた文字列だから安全って思い込みはやめるべきだ
"<div onclick='alert(1);'>click</div>"こういうのは文字列じゃないとか抜かすなよ

>Q. innerHTMLは絶対に使ったらダメなの?
>A. XSSが起きるような使い方をしなければ使って問題はありません。

つまり自分でDOMで構築するよりもリスクが高い事を認めているってことだよね

お前が主張する前にもう言っただろ
innerHTMLはパフォーマンスが悪くDOMを壊す

323:Name_Not_Found
14/11/11 09:56:13.25 .net
>>303
エスケープ

var DIV = document.createElement('div');

function escapeHTML(str) {
DIV.textContent = str;
return DIV.innerHTML;
}

というやり方もあるんじゃないか?

ただし、この関数の場合
escapeHTML(str1) + escapeHTML(str2) の結果が
escapeHTML(str1 + str2)
に等しくならない場合があるブラウザがあると困るかもしれない

ちなみに逆変換はこれでいけるかな?

function unescapeHTML(htmlStr) {
DIV.innerHTML = htmlStr;
return DIV.textContent
}

324:Name_Not_Found
14/11/11 09:57:11.06 .net
innerHTMLはパフォーマンスが悪くDOMを壊す(キリッ

世界中で使われてるのに?
jQueryにも使うなって言ってこいよ
変な宗教か何かやってるのかな?

325:Name_Not_Found
14/11/11 10:19:49.90 .net
デタお決まりのjQueryガーwwwwwwwwwwww

326:Name_Not_Found
14/11/11 10:29:48.42 .net
文字列操作で構築、変数部分はエスケープって一昔前に戻った感じだね

327:Name_Not_Found
14/11/11 10:41:28.13 .net
DOMを壊すって曖昧な表現だな
innerHTMLを使ってもDOMがぶっ壊れたりしないから良く分からんよ

328:Name_Not_Found
14/11/11 10:58:54.87 .net
無知がinnerHTML使うなって言ってて笑える

329:Name_Not_Found
14/11/11 11:40:48.95 .net
ごちゃごちゃとエスケープ処理を作るよりも
こういう>>319ハックのほうが個人的には好きだな

330:Name_Not_Found
14/11/11 13:38:02.07 .net
>>319
>>325
escapeの為にinnerHTMLを使うことは本当の馬鹿だからやめとけ
innerHTML否定厨よりも頭悪いぞ

331:Name_Not_Found
14/11/11 13:46:47.72 .net
>>325
賢い方法だが、テキストノードのエスケープ処理しかない点に注意
属性値のエスケープ処理を追加する必要がある

332:Name_Not_Found
14/11/11 14:19:25.43 .net
>賢い方法だが

ブラウザの挙動すら理解できてない馬鹿が一匹沸いたな

333:Name_Not_Found
14/11/11 16:32:43.53 .net
DOMOすんません

334:Name_Not_Found
14/11/11 18:58:18.81 .net
まあ今日はポッキーでも喰って落ち着け
つ━━一

335:Name_Not_Found
14/11/11 19:15:54.23 .net
一人で回答頑張ってる奴がいるみたいだから、このスレの回答は全てそいつ一人に任せればいいんじゃない?
そいつの認める奴だけが回答する権利を持つと言わんばかりの有り様だし

336:Name_Not_Found
14/11/11 20:38:17.72 .net
>>318
> つまり自分でDOMで構築するよりもリスクが高い事を認めているってことだよね

DOMで構築するほうがリスクが高いよ。
DOMで構築するとコードが長くなる。
コードが長くなるということはバグを入れる可能性が高くなる。
つまりバグを入れるリスクが高い。

337:Name_Not_Found
14/11/11 20:51:19.05 .net
>>331
それ、いいね。

じゃあ、君の意見に賛成する俺と
君は回答しないことにしよう。

多分君の危険に賛成しない人はいるだろう。
そういう人は回答してもいいけど、
少なくとも俺と君、この二人はもう絶対回答しないよ

338:Name_Not_Found
14/11/11 21:10:30.10 .net
>>319
DOM使ってエスケープするのは、可能といえば可能で
意外と遅くないらしいんだけど、やり過ぎだと思うよ。

仕様も実装も簡単なのに、ブラックボックスにするのがね。
あとサーバーサイドで使う時も考えると、
純粋なJavaScript(ECMAScript)の範囲にしておきたいし。

もちろん、DOMベースでやるよりも、文字列ベースのほうが
少ないメモリで実行できるので速くなる。

339:Name_Not_Found
14/11/11 21:12:32.90 .net
>>318
> "<div onclick='alert(1);'>click</div>"こういうのは文字列じゃないとか抜かすなよ

あほじゃね? どこのアホがonclickなんて文字を書くんだよ。

そんなマヌケがいたとしたら、createElement使っても
onclick書くだろw

どんだけおっちょこちょいなんだw

340:Name_Not_Found
14/11/11 21:16:01.95 .net
論点がずれてる。

JavaScriptを文字列の中に書くのはXSSじゃない。
それは単にaddEventListnerした要素にすぎない。

問題なのは文字列の中にJavaScriptを埋め込むことではなく
文字列の中にXSSを埋め込むこと。

文字列の中にXSSを埋め込むのは相当難しい。

341:335
14/11/11 21:18:01.52 .net
>>336
そのとおりですね。

俺が言いたかったのは、文字列の中にXSSを埋め込むようなおっちょこちょいは、
createElement使ってもXSSを埋め込むおっちょこちょいだろだろってことです。

342:Name_Not_Found
14/11/11 21:49:16.66 .net
俺がいいたいのは>>289のようなアホなコードを書く奴は何を書いてもXSSを起こすだろだろってことです

343:Name_Not_Found
14/11/11 21:55:43.65 .net
じゃあアホの部分を修正すればいいだけじゃんかw

344:Name_Not_Found
14/11/11 22:30:13.66 .net
ここはジャイアンのスレですね

345:Name_Not_Found
14/11/11 22:47:42.34 .net
ジャイアンに失礼だろ

346:Name_Not_Found
14/11/11 23:48:14.58 .net
結局また始まってんじゃん

347:Name_Not_Found
14/11/12 00:15:37.45 .net
仕方ないよ。
innerHTMLなんて、サーバーサイドのechoや
document.writeと同じで、エスケープすればいいだけの話なのに、
エスケープしなかったらXSSになるかもしれないから使うなって
意味不明なことを言ってるようなやつだからね。
頭が悪い奴はいくら言っても理解できない。

348:Name_Not_Found
14/11/12 01:28:13.89 .net
ゼビウスの開発コードネーム?

349:Name_Not_Found
14/11/12 01:34:13.10 +zRlwvNM.net
いま面白いことを言った!

350:Name_Not_Found
14/11/12 03:16:46.81 .net
ORMでデータを保存する時、
hoge.save()
のようなメソッドを発行すると思います
それによりajaxのリクエストが投げられるでしょう
しかし複数のデータを保存した場合、たとえばオブジェクトが100個あると、
100回もリクエストが発行されるのでしょうか?

351:Name_Not_Found
14/11/12 03:30:45.96 .net
>>346
フレームワークによると思うが
複数のリクエストをまとめる仕組みがあるだろう。

そういうたぐいのフレームワークについて
俺は詳しくないが、そのような仕組みを考えたことはある。
俺程度が思いつくものなのだから、普通にあると思う。

352:Name_Not_Found
14/11/12 12:35:05.41 .net
そうですか
調べてみます
ありがとうございました

353:Name_Not_Found
14/11/12 17:11:47.77 .net
>>330
チョコの方持つなよ

354:Name_Not_Found
14/11/12 23:15:55.68 PMYoTTja.net
ポップアップ画面のClickイベントでAddClass()をしてもブラウザに反映されません、親のフォームでは反映されました
原因が解る方お願いします。

環境:Chome 38, JQuery 1.10.2

355:Name_Not_Found
14/11/12 23:21:51.01 .net
var Sidebar = Spine.Controller.create({
events: {
"click [data-name]": this.click
},
init: function(){
this.bind("change", this.change);
},
change: function(name){ /* ... */ },
click: function(e){
this.trigger("change", $(e.target).attr("data-name"));
}
// ...
});

というコードがステートフルJavaScriptにあるのですが
events:のthis.clickに違和感があります
clickハンドラをSidebarのclickメソッドにマップしているところですが
ここのthisはSidebarではなく、定義時のthisになりますよね
そして関数ではないので、bindでthisをSidebarにする方法もないですよね
つまりどう考えてもおかしいのではないと思うのですが
何か間違っているのでしょうか?

356:Name_Not_Found
14/11/13 00:55:55.36 .net
もしかしたらオブジェクト定義の中にthisを書いたらオブジェクトがthisになるのかと思って
たしかめたけどやはりそんなことはありませんでした
記述ミスですかね〜

357:Name_Not_Found
14/11/13 02:41:07.64 .net
winXPを久しぶりに起動したらwindows updateが来ていました
またXPのサポートが終わった時から
avg2014が使えなくなっていたのですが
avg2015を入れたら問題なく使えるようになりました
なんだかサポート期限なんてなかったみたいな雰囲気になってますが
ということはIE6が延命していくのでしょうか?

358:Name_Not_Found
14/11/13 03:44:59.71 .net
延命? 命を延ばすわけ無いだろ。
余命過ぎてもまだ生きてるぐらいの意味だ。

359:Name_Not_Found
14/11/13 04:00:55.93 OMP0ufSZ.net
>>351
コード見てないからわからないけど、
click関数が前後のどこかにあるんじゃないの?

360:Name_Not_Found
14/11/13 05:32:24.80 .net
thisは文脈で変わる
各インスタンスのメソッド内では、そのインスタンスを指すけど、
関数がグローバルスコープで呼び出されていたら、
thisはグローバルオブジェクトを指す

thisを出力して確かめて

ECMA Script 3 では、入れ子になった関数内で、thisを使うと、
グローバルオブジェクトを指すというバグがあったが、
ECMA Script 5 では、修正されるらしい

361:Name_Not_Found
14/11/13 07:40:29.75 .net
greasemonkeyスクリプトなんですが、
スクロールを一定回数止めるため以下のように書きました。

var count = 1;
var scrollY;
start();
function start(){
scrollY = document.body.scrollTop;
window.addEventListener('scroll', scrollStop,false);
}
function scrollStop(){
count++;
window.scrollTo(0, scrollY);
if(count > 20) window.removeEventListener('scroll', scrollStop,false);
}

firefoxでは正常に動くのにchromeだとremoveEventListenerがうまく動きません。
chromeに対応させるにはどうしたらいいのでしょうか?

362:Name_Not_Found
14/11/13 08:34:23.28 .net
>>351-352
Spine.Controller.create の中身が不明なので答えようがない

363:Name_Not_Found
14/11/13 10:14:00.68 .net
結構メモリを食うjavaプログラムをjs(+HTML)に移植しています。
メモリエラーが出る関係から、sshを使って他のスペックの高いマシンでjava実行を
していたのですが、jsを同様にスペックの高いマシンの方で実行する方法はあるのでしょうか?
Node.jsのサイトなどを見ていたのですがこれでいいのかよく分からず・・・。
スレチ、文が意味不明、だったらごめんなさい

364:Name_Not_Found
14/11/13 22:44:33.71 .net
>>359
多分nodeでいいよ。

hello.js というファイル名


365:ナconsole.log('hello') って書いて node hello.js とやるとちゃんとhelloって言ってくれる。 ただ、ブラウザで動かしているものをnodeで動かすとしたら ちゃんとJavaScript(ECMAScript)の仕様の範囲にしておかないとダメだけどね。 ブラウザで動かすJavaScriptは、純粋なJavaScriptではなくて DOMというブラウザ専用ライブラリが組み込まれた状態。 だからDOMを使わないコードにしておかないといけない。・・・原則的には。 NodeはNodeでその実行環境にはブラウザを超える能力があるから ライブラリ次第でDOMも使える。 話がそれたけど、別のマシンで動かすならNodeでOK そのコードの書き方はDOMを使わないように気をつけることだね。



366:Name_Not_Found
14/11/14 00:10:33.66 .net
>>360
周りに聞ける人がいないので本当に助かります。
DOMを使わず書けるならそれが望ましい(結果的に楽?)のですね
とりあえずnodeで良さそうなので、もう少し書籍等調べてみます。
ご丁寧にありがとうございました。

367:Name_Not_Found
14/11/14 12:00:00.85 .net
>>356
> ECMA Script 3 では、入れ子になった関数内で、thisを使うと、
> グローバルオブジェクトを指すというバグがあったが、
> ECMA Script 5 では、修正されるらしい
初耳ですが、具体的にはどのようなコードでバグが再現されるのでしょう?
ES3での該当箇所や参考URLがあれば、掲示していただけると助かります

368:Name_Not_Found
14/11/14 15:14:01.80 .net
ソースは2ちゃんです

369:Name_Not_Found
14/11/14 15:42:43.64 .net
バクじゃなくて仕様だよ
ES6のアロー関数では外のthisと同じものを指すらしいけど

370:362
14/11/14 16:04:47.03 .net
>>363
具体的な2chのURLはどこになるでしょう?
また、バグと判断できる根拠は?

>>364
ES3では this はグローバルオブジェクトを参照する仕様ですが、ES5 でも変わってはいません
Strict Mode でのみ this は undefined を参照します
このように理解しているのですが、>>356の勘違いのような気がしてきました

371:Name_Not_Found
14/11/16 07:22:51.19 .net
>>357ですが自己解決しました
あれこれ試した結果、案外単純にwindow.onscrollで一時停止と解除ができました。

結局なぜremove出来なかったのかわからずじまいでしたがお騒がせしました

372:Name_Not_Found
14/11/16 17:53:05.70 EXTL8bVR.net
子Windowで選択した要素を親Windowに追加がしたくて
子Windowで
window.opner.item = selectItem;
親Windowで
$('#itemList').append(item.cloneNode(true));
としてみたのですがIEだけappendの時にHierarchyRequestErrorと出ます
ぐぐってみると子Windowからappendするときはwindow.opnerをつけるという感じのものしか見つからず解決しませんでした
どうしたらいいのでしょうか?

373:Name_Not_Found
14/11/24 02:14:18.29 0uSHMMOL.net
>>367
ウインドウが違うのに要素って移動していいのかな?
子ウインドウであればセキュリティ的には問題ないはずなんだけど
仕様的にどうなんだろう。

興味があるので詳しい人お願い

374:Name_Not_Found
14/11/25 11:09:23.94 .net
配列a(a[3000][3000]くらい)の中身を関数(js)B,C,D・・・で書き換え操作するプログラムを作っています
HTMLでファイルを読み込み、ロードが終わり次第、関数Bを呼び出し、Bが終わり次第
B内でCを呼び出し・・・としています。

これで上手くいけばいいのですが、メモリエラーになってしまいます。
BやC内でもaと同サイズの配列を新たに生成しているためメモリを食うとは思うのですが
やり方としておかしなところがあったりしますでしょうか?
GCのために使わなくなった大きな配列データはnullで初期化してるつもりなのですが・・・

375:Name_Not_Found
14/11/25 19:44:39.66 .net
>>369
>GCのために使わなくなった

それだとGCのタイミングに依存するかも
js 側の処理を中断して一度制御をブラウザ側に返す必要があるかもしれない

可能なら作業用の配列を何度も使い回す方がいいだろう

376:369
14/11/26 08:06:28.71 .net
>>370
GCという機能があるというのは知っていましたが
タイミングを含めて、どのように実行しているか調べていなかったので
開発者ツール?でチェックしてみようかと思います。

どちらかというと、未だによく理解できていないクロージャーの方が
問題かと思っていたのですが、そうでもなかったのですかね。
ご返答ありがとうございました。

377:Name_Not_Found
14/11/26 20:30:55.29 .net
DTならよく知っています。

378:Name_Not_Found
14/11/26 22:36:44.51 .net
>>369
> GCのために使わなくなった大きな配列データはnullで初期化してるつもりなのですが・・・

GCだと推測して対策ししたが効果はなかったということは、
GCは関係ないってことだよ。

379:Name_Not_Found
14/11/26 22:38:43.39 .net
>>369
どうやってHTMLでファイル読み込んでるのかしらんけど、
非同期処理の問題でしょ?

380:369
14/11/26 23:50:50.66 .net
>>372-374
今確認したところ非同期処理でファイルを読み込んでいるみたいでした。
同期処理のもあるみたいなのでそれで一度試してみます。
ただ、非同期のために値が取れていないという訳ではないんですよね・・・。

381:Name_Not_Found
14/11/27 09:08:01.05 .net
>>375
原因追及のために同期処理でやってみるのもいいけど
同期処理はあまりやらないほうがいいよ

382:Name_Not_Found
14/11/30 09:00:51.12 .net
残念なことですが、ここは線形合同法も知らない愚かな早漏野郎が立ててしまいました


383: 質問者は以下のスレに移動してください + JavaScript の質問用スレッド vol.121 + http://peace.2ch.net/test/read.cgi/hp/1410603104/



384:Name_Not_Found
14/11/30 11:05:46.50 .net
無限ループって怖いよね

385:Name_Not_Found
14/11/30 11:14:34.53 .net
(function f(){f()})()
みたいな

386:Name_Not_Found
14/11/30 19:18:46.49 .net
>>377
無限ループ怖いお(´・ω・`)

387:Name_Not_Found
14/11/30 23:28:23.75 .net
githubとかってjavascriptの勉強に使えますか?
英語読めないし、使い方がさっぱり分かりませんでした。

388:Name_Not_Found
14/12/01 08:57:39.84 .net
評価お願いします><


無からギター音
URLリンク(jsdo.it)

389:Name_Not_Found
14/12/01 09:05:13.52 .net
英語が分からなくても、JavaScriptという万国共通語があれば大丈夫

390:Name_Not_Found
14/12/01 13:48:33.51 .net
perlワンライナーで語るみたいな

391:Name_Not_Found
14/12/01 22:17:14.50 R7CxMEcr.net
backbone.jsを勉強しています
ビューの中でモデルにハンドラをセットし、モデルの変更をビューに反映させる、
ということは分かりましたが、
マウスなどの入力をモデルに反映させるのはどこでやるんですか?

392:Name_Not_Found
14/12/01 22:20:50.65 .net
ボタンを押した時の処理をどこで受けるのか的なことです

393:Name_Not_Found
14/12/01 22:31:04.21 .net
viewのeventsプロパティがハンドラとしてセットされ、
viewのメソッドで受けるようです
なんとなくコントローラの役割のような気がするのですが違うのでしょうか?

394:Name_Not_Found
14/12/02 00:25:21.12 .net
>>381
gitの本は、一杯あるよ

日本のサイトでも、サイト内だけだけど、MITライセンスで、
JSのソースコードを共有しているし、自由に使える。
ゲームも一杯ある
URLリンク(jsdo.it)

395:Name_Not_Found
14/12/02 01:16:08.62 .net
>>387の件ですが、
backboneのコントローラはURLとハッシュによって呼び出されるメソッドの集積のようですね
サーバサイドのコントローラに近いですね

396:Name_Not_Found
14/12/02 22:10:20.24 .net
ie7とie8とかでjsコードを実行したい場合、ietesterを使っていたのですが、
ietesterはバグがあるから、〜を使えってこのスレで言われた気がするのですが、
何使えばいいですか?

397:Name_Not_Found
14/12/02 22:18:43.78 .net
開発者ツールでいいんじゃね

398:Name_Not_Found
14/12/03 04:23:05.78 .net
virtualboxじゃね
実機の挙動にかなうものなし

399:Name_Not_Found
14/12/03 22:01:28.36 .net
昼休みは、会社の食堂でメシ食ってるときにテレビ見てるんだけどさ、
今どきのjs(女子小学生)のファッション特集とかよくやってんだけど、
マジでJS(女子小学生)って普通にテレビで言うようになったんだな。
うかつに「休日はJS(Javascript)の勉強してます」っていうと
「JS(女子小学生)の勉強・・通報しなきゃッ!」って感じで
通報されかねないやん

400:Name_Not_Found
14/12/04 00:22:45.66 .net
別に会話中にJavaScriptをJSなんて言わないよ

401:Name_Not_Found
14/12/04 03:04:54.51 .net
「はじめてのC」

402:Name_Not_Found
14/12/04 12:20:38.02 .net
Backbone.jsのViewで、classNameやidというプロパティは
スカラー値にすることも関数にすることも出来、
関数だった場合は返り値を設定したことになるそうですが
これナイスな方法ですね?

403:Name_Not_Found
14/12/04 21:07:51.79 .net
>>396
はい。ナイスな方法でよく使われます。
よく使われるので、汎用JavaScriptライブラリのlodashは
まさにそのための関数_.resultを用意しています。

URLリンク(lodash.com)

var object = {
'cheese': 'crumpets',
'stuff': function() {
return 'nonsense';
}
};

_.result(object, 'cheese');
// → 'crumpets'

_.result(object, 'stuff');
// → 'nonsense'

404:Name_Not_Found
14/12/04 23:36:21.48 .net
ほお
lodash使ってたのに知りませんでした
ありがとうございます

405:Name_Not_Found
14/12/04 23:42:39.22 .net
lodashはいい加減3.0をリリースして欲しい所。
全体のどれくらい終わったんだろうか。

406:Name_Not_Found
14/12/06 01:01:43.93 .net
qiitaに投稿した記事がやたらアクセス数が多い(3500超えた)と思ったら、
「Javascript 〜 〜」って検索すると一番上にqiitaに投稿した記事が来た
ストック6しかないのにな、業務とかでググってる人が多いのだろうか?

407:Name_Not_Found
14/12/06 02:28:32.81 .net
>>400
これか
URLリンク(qiita.com)
どこかのコミュニティで拡散されてるんじゃない?

408:Name_Not_Found
14/12/06 04:36:52.79 .net
backboneはドキュメントサイトが見にくいな
左フレームの幅が固定なのがアカン

409:400
14/12/06 08:36:37.42 .net
>>401
違います。特定されたかと思って焦ったじゃないか。

410:Name_Not_Found
14/12/06 10:14:53.95 .net
>>400-401
自作自演で宣伝ご苦労様でした

411:Name_Not_Found
14/12/07 17:11:41.77 .net
何qiitaって?お金になるの?

412:Name_Not_Found
14/12/08 03:24:15.57 .net
backbone.jsでset時にvalidateした場合、invalidな値がセットされることはありませんが
そうでない場合はsave時にvalidateされるので
invalidな値が属性に入ってくることになりますよね?
そうなるとinvalidな値を元にrenderすることになると思います
そうすると対応が面倒なので、バリデートはset時にするのが当たり前なのでしょうか?

413:Name_Not_Found
14/12/09 03:12:45.73 .net
テンプレートはHTMLにtext/templateとして書く方がいいのでしょうか?
そうなるとテンプレートの断片がHTMLの中に並ぶわけで、
それならJavaScriptファイル中に書くのと分かりやすさ大差なくね?
いやむしろJavaScriptファイル中に書いた方が分かりやすくね?
って思います。
HTML自体がテンプレートのようなものなので、
テンプレートの中にテンプレートの断片を入れているような気持ち悪さがあるのです

414:Name_Not_Found
14/12/09 03:52:40.21 .net
ドットインストールのbackbone.jsのレッスン見終わりました
やはり本を読んだりするより映像で学ぶのが一番効率いいと思います
もう少し詳しい学習をしたいのですが、そういうムービーどこかにないですか?

415:Name_Not_Found
14/12/09 07:30:50.53 .net
>>408の件ですが
英語の動画は沢山あるのですが日本語のものはないようですね
スライドを見ればある程度は何してるのか分かりますが
それなら最初からスライドを探した方がいいかもしれません

416:Name_Not_Found
14/12/09 22:09:50.18 .net
>>405
qiitaへの投稿のメリット
・自分の投稿した記事の内容を自画自賛して「オレすごすぎwww」ってなれる
・ググルト自分の記事がヒットするからいい感じになる。
・hddがあぼーんしてもqiitaに投稿した内容は消えない

qiitaのダメなとこはgood、badタグがないことだな。

JavaScriptでかっこよくthisを回避する
URLリンク(qiita.com)

↑例えば、どこがかっこよくthis回避なのか不明な記事とかにbadを押したく
なるときにできないのが難点

417:Name_Not_Found
14/12/10 06:42:57.68 .net
JavaScriptを独学で勉強しようと思うのですが、一番初めに見るおすすめの参考書はどれでしょうか?

418:Name_Not_Found
14/12/10 06:44:56.92 .net
observerパターンについてですが
ハンドラを解除しないままobserverの方を削除してしまったら
ハンドラが残り続けてメモリリークになるんじゃないかと思うのですが、
大丈夫なのでしょうか?
observerのデストラクタで解除するようにすればいいと思いますが
JavaScriptではデストラクタがないので、そういう方法は取れないと思います

419:Name_Not_Found
14/12/10 06:49:31.08 .net
>>411
中級者以上ならオライリーのJavaScriptがいいと思うけど
初心者向けとなると逆に何がいいか分からないな

420:Name_Not_Found
14/12/10 08:38:36.00 .net
qiitaにたまに芸能人の画像貼り付けてる奴がいるから通報してる

421:Name_Not_Found
14/12/10 11:42:29.48 .net
>>411
My UNIXシリーズの奴は解りやすかった。

422:Name_Not_Found
14/12/10 18:44:48.11 .net
backbone.jsのために
サーバ側から送るJSONのフォーマットが良く分かりません
ドキュメントにもそれらしき項目がないようですし
ガイドブックにも何故か見当たりません
どこ見たらいいですか?

423:Name_Not_Found
14/12/11 12:51:44.73 .net
>>416の件ですが、
ごく当たり前に記述する、で正解でした
fetchした直後にcollectionをlogしたら、lengthが0だったので、
JSONの記述の仕方を間違っているのかと思ったのですが
非同期で読まれるのでfetch実行直後にはまだ値が入ってないんですね

424:Name_Not_Found
14/12/11 16:14:00.90 .net
backbone.jsで、モデルを新規作成してsaveした時、
サーバサイドで割り振ったidをクライアントに反映すると思うのですが
どうやるのか良く分かりません
POSTのレスポンスとしてidを返すんでしょうか・・?

425:Name_Not_Found
14/12/11 22:10:22.43 .net
<div>
<div></div><div>★</div>..
</div>

★のところから自分のノードが親に対して1だという
ことはどうすればわかりますか?

426:Name_Not_Found
14/12/11 22:41:22.36 .net
★の2に対する子から親が1かどうかをしらべる

427:Name_Not_Found
14/12/11 23:23:09.04 .net
>>418の件ですが
普通に
{"id":100}
みたいなJSONを返せばいいだけでした
JSの癖で、キー名を""で囲まなかったのでエラーになってました

428:Name_Not_Found
14/12/12 00:50:56.80 .net
JSONライブラリ使えよ

429:Name_Not_Found
14/12/12 04:48:04.07 .net
面倒なので手書きしてました

430:Name_Not_Found
14/12/12 05:03:45.42 .net
手書きというのはライブラリを、ではJSONをという意味です
まだやり方をテストしてる段階なので

431:Name_Not_Found
14/12/12 18:52:01.28 .net
backboneを使うため、
lodashをunderscore buildにしたら
assignが使えなくなりました
ソースを見るとextendというエイリアスは生きているようです
別にバッティングするわけでもないのだから
assignを生かしておいても問題ないと思うのですが
なぜassignをなくしたのだと思いますか?

432:Name_Not_Found
14/12/12 19:39:02.71 .net
URLリンク(stackoverflow.com)

ここを見るとbackbone.jsに普通のlodashを使ってもほぼ問題ないようですね

433:Name_Not_Found
14/12/13 00:56:04.61 .net
質問です。
<dl>
<dt>dt 1
<dd>dd 1
<dl>
<dt>dt 1-1
<dd>dd 1-1
</dl>
<dt>dt 2
<dd>dd 2
</dl>
一番外の dl 直下の dt のみを取得したいと思います。つまり、「dt 1」と「dt 2」を取得したいです。
しかし以下のコードで取得しようとすると、「dt 1-1」まで取得してしまいます。当たり前と言えば当たり前ですが。
elm.querySelectorAll("dt"); //(elmは一番外のdl要素です)
もちろん、取得した後にフィルターを掛ければいい話ですが、あまりスマートではありません。
querySelectorAll()で一発で「dt 1」と「dt 2」を取得する方法はありますか?

434:Name_Not_Found
14/12/13 10:12:46.95 .net
childNodes[childNodes.length-1]

435:Name_Not_Found
14/12/13 10:48:32.28 .net
>>427
dl直下のdtというのなら、dl > dtでいいんじゃないの?
querySelectorAllがどこまで対応しているかしらないけど、
ブラウザによって動きは違うかもね。

こういう場合はjQueryを使ったら、古いブラウザ含めて対応できるよ。

436:Name_Not_Found
14/12/13 11:39:08.98 .net
>>429
dt 1-1もdlの直下なのでダメだね
最上位のdlが特定できればいいんだけど
idとかついてないの?

437:名無しさん@そうだ選挙に行こう
14/12/13 17:58:14.07 .net
>>429
ありがとうございます。
確かにjQueryでしたら簡単に実装できますね。ライブラリの使用も視野に入れてみます。

>>430
ループ処理しているので、唯一に特定できるidなどは何もついていません…。
elmに代入されているということだけが唯一の情報です。
やはりフィルター処理しかないでしょうか。

438:名無しさん@そうだ選挙に行こう
14/12/14 09:07:12.58 .net
querySelectorAllの前後でidの付け外しをするとか
(上書きのことを考えるとclassの方がいいか)

でもまあフィルタがいいと思うけど
jQueryにするんなら.filter() で結構簡単に書ける

439:名無しさん@そうだ選挙に行こう
14/12/14 16:24:43.80 .net
backbone.jsでは、イベントハンドラはviewに付けますが
モデルと関係ないようなイベントハンドラはどこで付ければいいんでしょう?
たとえば画面全体に対するmousemoveなど。
イベントハンドラを付けるために画面全体用のviewも作るんでしょうか?
それもなんか無駄な感じがします

440:名無しさん@そうだ選挙に行こう
14/12/14 18:22:46.55 .net
普通のMVCとかだとレイアウトやヘルパー、パーシャルなオブジェクトってのがあるんだから
(ってもCakeしかやった事ねーけどw)そーいう差し込み可能なユーティリティーってのが
backbone.jsにもあるんじゃね?知らんけどw
知らんからこれ以上はひっこむわw

441:名無しさん@そうだ選挙に行こう
14/12/14 18:35:26.65 .net
backbone.jsに同梱しているサンプルアプリを見ると
全体を包含するDOM要素をAppViewとして
var App = new AppView;
でアプリケーション自体を起動する感じでした

442:名無しさん@そうだ選挙に行こう
14/12/14 18:51:32.90 .net
じゃあそれ拡張してアタッチすりゃあいいのかな?
あ、出てきちゃったw

443:名無しさん@そうだ選挙に行こう
14/12/14 18:53:32.81 .net
ですね
サーバサイドMVCのコントローラっぽい感じです

444:Name_Not_Found
14/12/15 15:12:50.28 .net
backbone.jsのviewにeventsでイベントを設定する時
セレクタにwindowを設定することは出来ないのでしょうか?
出来ないとすると、eventsで設定したり、自前で設定したりして美しくないですよね
eventsの設計ミスとしか思えませんがどうなのでしょうか

445:Name_Not_Found
14/12/15 15:14:29.61 .net
セレクタにwindowを設定するという
設計がミスなんだろ。

446:Name_Not_Found
14/12/15 15:23:25.27 .net
実際にwindowにイベントハンドラをセットする必要があるので設計ミスではありませんが?
でもevents=viewが所有するDOMに付けるイベントを管理するもの、
と考えたら別にアグリーでもないかもしれません
ありがとうございました

447:Name_Not_Found
14/12/17 09:48:29.86 .net
backbone.jsにはコントローラがないので
それだとviewがやたらでかくなるのでは?
それともコントローラ的な部分は自前で用意するのか?
と悩んでいたのですがコントローラなどを用意したマリオネットっていうやつがあるようです
プレーンなbackboneではなくmarionnetteの方を使うのが今の感じなんですかね?

448:Name_Not_Found
14/12/17 11:26:57.98 .net
振分けられる処理は極力ModelやCollectionに振分けましょうって
思想みたいだけどようワカランね。
Routerは大した仕事はしなさそうだし。

サーバーサイドのMVCモデルのように間に何かが入る必要があるか?
を考えてみた方がよいのかも。

449:Name_Not_Found
14/12/17 12:48:17.23 .net
やっぱコントローラーとしての役割はRouterぐらいしか見当たらないな

サーバーMVCのView間の遷移なんてものが無いから出番もそんなに無いって事なのかも

450:Name_Not_Found
14/12/17 13:24:46.31 .net
質問です。Unix系のファイルで正規表現を書くときに
バックスラッシュを使いますが、これはWindowsで読む
とエラーになりますよね。あちらは\らしいですが、
どう回避してるのでしょうか?

451:Name_Not_Found
14/12/17 13:32:03.87 .net
なりませんよ

452:Name_Not_Found
14/12/17 15:14:30.78 .net
ファイル名じゃないから関係ないね

453:Name_Not_Found
14/12/18 18:43:47.24 ChiIDXGI.net
チェックボックスのラベルを変更するにはどうすればよいでしょうか?
jQueryは使わずにおこないたいです。

<input type="checkbox" id="chk1" name="chk" value="1">
<label for="chk1">aaa</label>

のaaaをbbbに変えたいのですが
document.getElementById("chk1").innerText="bbb";ではダメなようで。

454:Name_Not_Found
14/12/18 20:34:00.69 .net
ラベルにidフルか、nextsibiling

455:Name_Not_Found
14/12/18 21:26:37.86 .net
ちなみにinnerTextはFirefoxで使えないから注意ネ

456:Name_Not_Found
14/12/18 21:45:12.50 .net
標準の textContent や data 属性を差し置いて
やたら innerText を見かけるけど何でなん?

457:Name_Not_Found
14/12/18 22:01:58.41 .net
ヒント:企業グラマー&ユーザー

458:Name_Not_Found
14/12/18 23:08:48.81 .net
>>450
IEのサポートが9からだから。

IE8のサポート期間が2016年1月12日だから
あと1年は対応が必須。

その期間を過ぎたらすぐにIE8のサポートをうちきって
いいのか?って話はあるが。

459:Name_Not_Found
14/12/18 23:32:11.70 xIB+P02h.net
jQuery 2.1.2リリース!
URLリンク(github.com)

460:Name_Not_Found
14/12/19 07:33:09.51 .net
SHIFT+ENTERのキーコードが13でENTERになっているのですが
SHIFT押しながらENTERおしたときと
単にENTERを押した時の区別って出来ますか?

461:Name_Not_Found
14/12/19 09:18:33.62 +jAv/pOh.net
>>448
>>449
ありがとうございます。
idをふったらできました。

document.getElementById("chk1").nextSibling.textContent = "bbb";
のほうは、aaa → bbbaaa になってしまいました・・・
使い方が違うんでしょうね ^^;

462:Name_Not_Found
14/12/19 10:45:26.13 .net
innerTextとtextContentは若干挙動が違うらしい
支障が無ければinnerHTMLを使ったほうが良いらしい

463:Name_Not_Found
14/12/19 10:48:09.53 .net
>>454
引数を渡すようにすればその中に入ってるはずだ

URLリンク(so-zou.jp)

464:Name_Not_Found
14/12/19 11:13:03.94 .net
>>457
そのようなプロパティがあったのですね
動作も確認いたしました
どうもありがとうございます

465:Name_Not_Found
14/12/19 11:44:55.50 .net
>>455
まだいるか分からないけど訂正すると
.nextSibling.textContent = "bbb"; で 「bbbaaa」 になるのは、<input>と<label>の間を改行しているせいで 改行だけのテキストノードが存在から。

つまり、<input>と<label>の間を改行しなければ .nextSibling.textContent = "bbb"; で可能
例1:<input type="checkbox" id="chk1" name="chk" value="1"><label for="chk1">aaa</label>
例2:<input type="checkbox" id="chk1" name="chk" value="1"
><label for="chk1">aaa</label>

または、HTMLを変えずに、nextElementSibling.textContent = "bbb"; でもおk

466:Name_Not_Found
14/12/19 13:00:46.02 +jAv/pOh.net
>>456
>>459
ありがとうございます。
勉強になります。

467:Name_Not_Found
14/12/22 21:51:12.61 r9xSRLJj.net
Google Maps API V3を使ってカスタマイズしています。

テキストフォーム一つに検索ボタンです。
改行、Enterキーを押して実行できるようにしたいです。

form onsubmit="script()"
input type=text
input type=submit

これだと検索できません。

form
input type=text
input type=button onclick=script()
だとボタンクリックで検索ができますが、Enterキーでは検索できません。

どうしたら良いのでしょうか?

468:Name_Not_Found
14/12/22 22:15:17.26 .net
>>461
form onsubmit="script();event.preventDefault()"
input type=text
input type=submit
で、どうだ

469:461
14/12/22 22:27:49.48 .net
>>462
ありがとう!できました。

470:Name_Not_Found
14/12/28 19:09:58.56 .net
var a = new Array1();
a[3].x = 1;
a[7].y = 2;
上のようにできる、プロパティの付いた配列のクラスらしきものを実現したいのですが
どのようにすればできるでしょうか?
変数のプロパティだけでいいなら
var foo = new Foo();
function Foo()
{
this.x = null;
this.y = null;
}
みたいな感じにはなると思うのですが・・・

471:Name_Not_Found
14/12/28 22:42:49.38 .net
>>464
配列の初期長を決めて、あらかじめインスタンスを必要個数分だけ作っておくのはどう?
function Foo(){
this.x = null; this.y = null;
}
function Array1(len){
for(var i=0;i<len;i++) this[i] = new Foo();
}
var a = new Array1(8); //[0]~[7]のFooのインスタンス配列
a[3].x = 1;
a[7].y = 2;

472:464
14/12/28 22:54:22.94 .net
>>465
システムの構成上配列が結構大きく、配列の長さが場合によって結構変化するので
初期に作る方法以外のものがもしあれば、と思ったのですが
やっぱり現実的にはそうなってしまうのでしょうかね・・・

473:Name_Not_Found
14/12/29 00:12:26.93 .net
>>466
なるほど、配列の長さが変化するのなら、>>465はオススメできないね

その条件なら、毎回正直にインスタンスを作るのが普通だろうなあ
function Foo(){
this.x = null; this.y = null;
}
var a = new Array(); //ただの配列
if(!(3 in a)) a[3] = new Foo();
a[3].x = 1;
if(!(7 in a)) a[7] = new Foo();
a[7].y = 2;
この処理は面倒だから関数化するといいかも

あるいは、配列でなくていいなら一次元的に格納するか
var a = new Object(); //ただのオブジェクト
a["3x"] = 1;
a["7y"] = 2;

あるいは、Firefox限定で構わないなら、Proxyを使うという方法もある

474:464
14/12/29 11:06:39.64 .net
>>467
inとかよく分かってないのでちょっとまた調べてみます。
ご丁寧に色々な案を提示して下さってありがとうございました。

475:Name_Not_Found
14/12/29 12:13:37.73 .net
>>466
疑似配列の長さ(length)の得たいなら Object.defineProperty で出来ると思う

>>468
この場合は Object#hasOwnProperty がいいかな

476:464
15/01/02 10:45:11.06 .net
>>469すみません気付いていませんでした
ただ、まだ疑似配列作っていろいろするほどの力も時間も今はなさそうなので
とりあえず初期に作成する方法でやってみます
一段落したら挙げてもらったものを調べてみようと思います
ありがとうございました。

477:Name_Not_Found
15/01/05 00:09:08.26 vo7XD6Y+.net
10進数の連番IDをhash化したいと思い調べていたところ、
下記の関数を見つけました。
この関数は衝突なく安全に利用できますか?
理解できる方は、各処理の解説もして頂ければ助かります。。。


var shuffleTable = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61];

var create62Hash = function(id, shuffleTable) {
var asciiTable = [65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57];
var hashTable = new Array();
var i = 0;
do {
hashTable[i] = String.fromCharCode(asciiTable[shuffleTable[(Math.floor(id / Math.pow(62, i)) + i) % 62]]);
i = hashTable.length;
} while(Math.pow(62, i) <= id)
return hashTable.join("");
}

478:Name_Not_Found
15/01/05 00:15:33.79 .net
引用するなら引用元のページも欠くのが最低限コードを書いた人への礼儀だぞ

479:Name_Not_Found
15/01/05 00:35:44.49 .net
>>471
ハッシュ化したいならその関数は使えません。
なぜならハッシュ化してないからです。

480:Name_Not_Found
15/01/05 00:40:43.91 .net
>>471
ただの10進数⇒62進数変換


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

559日前に更新/282 KB
担当:undef