+ JavaScript の質問用スレッド vol.124 + [転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-4のテンプレを読んだ上で質問してください。
■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
(ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
※必ず「問題の事象が再現されること」を確認してください。
必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。
+ JavaScript の質問用スレッド vol.123 +
http://peace.2ch.net/test/read.cgi/hp/1423915644/
(ライブラリ禁止条項は、多数の意見によって廃止されました。ライブラリの質問もOKです) ここは乗っとりたいという子が自演するスレだそうです
8 :Name_Not_Found:2015/03/22(日) 22:54:21.29 ID:???
>>7
ライブラリ禁止スレの次スレを乗っ取りたいからです。
9 :Name_Not_Found:2015/03/22(日) 23:09:36.52 ID:???
ついでにプログラム板も乗っ取りました。 >>1
多数の意見ってwww
匿名で何言ってんのこの馬鹿 jqueryでイベントを要素につけられた状態の時、
その要素からそのイベントハンドラを探し出す方法ってどうやるの? jQueryの質問は、
web制作管理板の以下のスレで、聞いて
jQuery ライブラリ 総合質問所 vol.4
ttp://peace.2ch.net/test/read.cgi/hp/1400313626/l50
+ JavaScript の質問用スレッド vol.121 +
ttp://peace.2ch.net/test/read.cgi/hp/1410603104/l50 全ブラウザで動くコードを生成してくれるaltjsの類ってありませんか >>9
全ブラウザに、IE3や
ガラケーブラウザは含まれますか? 荒らしの立てたスレで語り合っても仕方なかろう
既存スレがまだ残っているというのに
+ JavaScript の質問用スレッド vol.117 +
http://peace.2ch.net/test/read.cgi/tech/1404146244/ 俺は CSV は Windows で JScript で ADO でやることに決めている。
これはつまりそこに適合しない物をまず適合するように微調整してから Windows 環境に投げるということを意味する。 質問です。
自分の作る関数名に$って入れていいんですか? >>17
JavaScriptの仕様的には入れても問題ない。
だが特殊なことでもない限りやめておけ。
jQueryやPrototypeは数くない例外だ
本当はやってはいけないことをやったが
それを大きく上回るメリットがあったから受けいれられた。 prototypejsはPHP/Ruby畑の外人がまだJSに精通する前に書いちゃったからああなった。
その流行を横目に見ながら露骨にライバル心を示しつつcssQueryを発展させてjQueryは世に出た。
jQueryのメンバーはJSに精通していたからcssQueryに$なんて使っていなかったがprototypejsで一般化してしまった$を使ってユーザー取り込みを図り成功した。 prototype.jsは、その名の通りプロトタイプを拡張して
標準のオブジェクトに便利メソッドを追加するライブラリ
jQueryはCSSセレクタを使って取得したオブジェクトを
関数型的に処理するライブラリ
どちらも同じ$で要素を取得できるけど、
ぜんぜん違うライブラリなんだよな。 ありがとうございます。
いろんなサイトのソースを見てるとあきらかにjQueryじゃないのに$を使ってて疑問に思い質問しました。 $を含んだ関数は少ないが$を使った変数ならある。
オライリーから出てる本の何かで
jQueryオブジェクトは、DOM要素と区別しやすように$という
プリフィックスを変数名につけるというやり方が紹介されていた。
$が含まれた関数を使っているものとしては他にprototypeがあるな。
$が含まれた変数だとAngularJSが$scopeとか使ってる。
Backboneにも$elがあるな。
jQueryじゃなくてもその他のライブラリか、
もしくは変数ではないか? $ の ES3, ES5 に纏わる話は Togetter にまとめられてるね
この規則は ES3 のままで良かったのに、と思う
http://togetter.com/li/48425 >>24
それは少数派の意見だね。
変えたほうがいいという意見が多かったから変わった。 &{...} を流用すればよかったのに敢えて ${...} を作った慇懃無礼さには苦笑させられた。中の人はやっぱりprototype.js以降のニワカたちを小馬鹿にしている。 >>25
多数派か少数派かはとうでもいいし、多数派が良いとは限らない だからといって少数派が良いってことにもならない。
どちらがいいかは確定しないが
確率的には多数派が良いことが多い。
ってわざわざ言わんとだめなの? >>26
説明が足りないので、頭悪そうに見えるよw >>28
良いか悪いかわからん判断材料は検討するだけ無駄と言うこと
「多数派の方が良いことが多い」や「それは少数派の意見」もあなたが無根拠に主張しているもので参考にならない >>30
何を言ってるのかわからん。
今から検討しろって話じゃない。
過去の人間が検討していいと判断して決めた結果だという話だ。
事実を言ってるだけだよ。
お前が過去の検討に参加してなくて知らないから
うんぬんかんぬんとかどうでもいいよ。
知らないなら口を挟まなくていい。 >>31
ソースを出せといってるんだよ
おまの記憶の話などはどうでもいい >>32
何のソース?
変数名に$をつけるのは昔はだめだったが、
新しい仕様では良くなったというソース? >>33
アホか、それは>>24で既に出てるし、ツリー上でも一回も言及してないだろ
>>30で引用した「多数派の方が良いことが多い」と「それは少数派の意見」のソースだよ >>33
巷を見ればわかるでしょ。
PHPじゃあるまいし。変数名に$つけてるような奴のページは、一発で
閉じていいよ。 >>38
気持ち悪いっつーか、馬鹿そのものだな。
少なくともプロジェクトでそんなことやってる奴いたら、真っ先に外すわ。 Jquery AJAX についてのスレが無さそうだったので
ここで投稿させて頂きます。
違ってたら誘導お願いいたします。
WEBフォームでinput type="file" のタグ1つと実行ボタン1つだけのアップロード画面があり、
そこで選択された内容をアップロードする画面をご想像ください。
ただし、同名のファイルがある場合上書き確認のConfirmダイアログを出し、OKならば登録用のサーブレットを呼び出すようなことをしたいと思っております。
このとき、Jqueryで一旦確認用のサーブレット(とりあえずJAVAですが原語はPHPでもなんでもOK)にファイル名を$.AJAXを使用し、ファイル名をinputタグから取得しPOSTとして投げて戻り値に
存在するかどうかを返してもらってから実際の登録部分にSubmitしています。
このとき最初の確認用サーブレットでは問題がなく、その後の登録用サーブレットで ファイルが取得できなく困っています。
(直接登録用サーブレットを呼べば問題なく登録できることは確認済みです。)
ファイルが最初の確認サーブレットに投げられていて(画面全ての内容がPOSTされていると思われる)、登録用サーブレットに送られないのかなと思っております。
これを回避する方法として、最初の確認の際にセッション名なりでファイルを保存し、実登録の際にそのファイルを使えばいいとも思うのですが
スマートでないのと、実運用が始まってしまっているのであまり手を入れたくありません。
フォームを追加してそこだけ投げれるようなことはできないかと考えましたがそれも難しそうです。
もし、同じような事を解決されている方がいらっしゃいましたらヒントでも構いませんのでご教示いただければと思います。
(Jqueryにこだわる必要はなく、自分でXMLHttpRequest を作ればいけるだろ的なものまで なにでも構いません。)
宜しくお願い致します。 最初のクリックでsubmitキャンセルしてないだけとか凡ミスじゃね
実際のコード見ないと何とも言えんが >>42
処理の流れだけ見ると静的フォームなので jQuery の介在する余地がありませんが、k^jQuery はどの処理を担当してるのでしょう?
form送信先の書き換え?手動のsubmitはせず、ajax()?
本番用とは別にテスト用フォーム、コードを書いて切り分けした方が良さそうですが。
ちなみに、ライブラリスレはこちらです。
JavaScript ライブラリ総合質問所 vol.4
http://peace.2ch.net/test/read.cgi/hp/1400834117/ >>43
確認してみましたがtype=button でclickイベント捕まえて拾って自分でsubmitさせているので
凡ミスも含めてそこは問題ないようです。
>>44
ありがとうございます。
次回からそちらで質問することにします。
ひとまず自作でHttpXmlRequestオブジェクトのインスタンス化から行い、$ajax部分を置き換えると上手くいってしまいました。。。
逆になんか気持ち悪いのでちょっとJqueryのフルタイプを使用して、送信時にどんなことやってるか軽く探ってみることにしてみます。
スレ汚しすみませんでした。 こっちだよ
+ JavaScript の質問用スレッド vol.126 + [転載禁止](c)2ch.net
http://peace.2ch.net/test/read.cgi/hp/1439005423/ 現行スレ
+ JavaScript の質問用スレッド vol.125 + [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/hp/1436910657/ Dart「js吐くンゴww」
Type・CoffeeScript「ワイも吐くンゴwwワイらの時代ンゴww」
Opal「ヨロシクニキーwwwwwwwwwwwwwwwwwwwwwwwww」
Ruby「おっOpalゥー!!!!!!wwwwwwwwwwwwwwwwwwwwwwwww」
Dart・Type・CoffeeScript「」
JavaScript「(=・ω・=)キャーRubyさんステキ!!」 ↓こちらへどうぞ
【node.js】サーバサイドjavascript 3【io.js】(c)2ch.net
http://peace.2ch.net/test/read.cgi/tech/1419673207/ すいません、javascriptの文字列をRails側に渡したいのですがどうすればいいですか。 プログラム起動時ってなんのことですかTT
RoRでjavascriptと連携したいんですが。 なんかよくわからないけど調べてみますTT
ありがとうございます。 JavaScriptで数字を
0.0
0.
10.0
などと書くのは文法的に間違いですか?
0
10
が正解ですか? いや、君の質問も意味が判らん。
いずれかの処理系が文法エラーと言ってる? >>59
javascriptの文法で正しいのか間違っているのかと言う質問のどこに不明な点が有りますか? >>60
・どこかの処理系がエラーにしたのか?
・浮動小数点型が扱えるのにリテラルが書けないと思う理由は? 特定の処理系の話ではない。
文法的に正しいかどうかという質問だぞ。
誰も分からないようだ。 >>63
質問の意図をはかりかねている。
何故
0.0
0.
10.0
と書くのが文法的に間違いだと思ったのか。
小数点以下が0なら整数で書くという意図なのか?
自分が書いたコードの中で、こう書いた行でエラーでも出たのか? >>65
何がそんなに不思議なの?
他の言語を使った事が無いの? そりゃ不思議だろ。
試してみりゃスグに判る、文法的に間違いとは思えない事を
疑問に思いつつ、なぜそう考えるのか意図を隠してるんだから。 試せば一瞬で分かるようなことを質問をすること自体が不明
こいつは他の言語でも一々聞いて回ってるのか? 多分何もわからなくて困ってるだけだよ。
dotinstallって検索してみて >>69
もはや質問ですらない。
勉強もしていないしするつもりもない馬鹿の戯言。回答する必要はない。 整数なら、0, 10 と書く。
浮動小数点なら、0.0, 10.0 と書く
まあ、整数で書けるなら、整数で書いた方が、わかりやすそう
JSの内部では、どちらも数値型で、整数で書いても、
浮動小数点に変換されるから、見た目だけの問題だが 質問です。
GetObject()メソッドで、オートメーションサーバーアプリケーションのオブジェクトを取得したい場合、
第2引数に、そのアプリケーションのクラスの文字列を指定すればいいということはわかったのですが、
肝心の「クラスの文字列」を知るには、どうすればいいのでしょうか?
具体的にやりたいことは、下記のサイトにある、
起動済みVisual Studio IDEにIDE外部からファイル名と行番号を指定してファイルをオープンさせる
というjava scriptを、Visual C# 2010 Express に対して使用したいと考えています。
スクリプトのコメントには、
Visual StudioおよびVisual Studio Expressの場合について、クラスの文字列が書かれているのですが、
Visual C# 2010 Expressの場合、これらの文字列ではオブジェクトを取得できませんでした。
試しに
"VCSExpress.DTE" ← VCSExpressはVisual C# 2010 Expressのexeファイル名
などとやってみたのですが、ダメでした。
制御したいアプリの、クラスの文字列は、どうすれば知ることができますか? すみません、WebサイトのURLを貼り忘れました。
サイトのURLを書いて再度投稿ようとしたのですが、
なぜか「NGワード」と言われて投稿できないようです。
「"Visual Studio IDEにIDE外部から"」でググってトップに出てくるサイトが、該当サイトです。 【閲覧注意】戦闘に巻き込まれて頭部を切断された少女の遺体。これがリアルなシリア。
http://dqnworld.com/archives/34.html
これが本当の戦争の恐怖。この少女には大人の戦争は関係ないですからね。巻き込まれた少女の遺体を持って何か
を訴えかけている男たちの映像です。
【閲覧注意】シリアで反体制派の兵士が顔を吹き飛ばされてしまう瞬間。
http://dqnworld.com/archives/89.html
スローモーションが怖すぎる・・・。
【閲覧注意】アッラーフアクバルを叫びながら少年を斬首する映像を公開する。
http://dqnworld.com/archives/3975.html
点滴?のようなものが見えるんだけど。助けられた少年じゃなかったのか。助けられた所を強奪されてアッラーフ
アクバル?なのかしら・・・。
【閲覧注意】磔にされた戦闘機パイロットの遺体。シリアにて。
http://dqnworld.com/archives/3996.html
今日のアッラーフアクバル動画。
【閲覧注意】この首吊り自殺、足スレスレだけど本当に死ねてる?
http://dqnworld.com/archives/4001.html
中国で撮影された首吊り自殺の映像です。既に死んでいると書いてあるけど自分で揺らしているようにみない?www
妻の目の前でぶっ飛ばされた旦那さん?これは死んだかな(°_°)
http://dqnworld.com/archives/4004.html
さすがにこれだけ飛ばされたら助からないかな・・・。
【閲覧注意】あおむけでゲロを吐きまくっている男性。助けてやれよ・・・。窒息するぞ(@_@;)
http://dqnworld.com/archives/4007.html
これ結構危ないんじゃないの?撮影してないで横向きにしてやれよ。これ窒息する可能性あるだろ。 ・devtoolsの cosoleでセレクタを指定してEnterした時に
出て来る、「context」と「__proto__」ってどういった情報なの?
中身の調べ方がよくわからない。
・jQueryの attrメソッドで、
<a href="">foo</a>
<a href="">bar</a>
<a href="" data-bazz="bazz">bazz</a>
に対して、
$('a').attr('data-bazz');
と指定しても "bazz" が取得できずに undifined が返ってくるのはどうして?
この指定は間違っているの? >>78
attrはセレクタにマッチした最初の要素の属性を返すから。
ついでにいうと、data-bazzを取得するなら$('a').data('bazz')の方が良い。
こちらも同じく最初の要素の値を返すが。 jQueryの質問は、web制作管理板の、jQueryのスレに書き込む方がいい
あっちの板の方が、人が多い ライブラリのドキュメントに書かれている通りの
オブジェクトやメソッド呼び出したら undifinedだった場合、
みんなはどうしてるの?
devtool上の sourceにはファイルが認識されていて入るが調べ方がわからない。 JavascriptとPHPって併用するケースが少なくないから
自分が書いてるコードの言語を区別するって意味で
JavascriptではjQueryのセレクタ以外で$使わないのと
変数、関数のネーミング自体を
Javascript→functuonName(), variableName
PHP→functuon_name(), variable_name
みたいに区別する様なルール付け見たいな思想を持ってた方がいい >>84
そういう細かい話は
(有名な)コーディングスタイルを採用する
という行為に内包されてる。
考えるべきは、どのコーディングスタイルを採用するかであって
その最低条件として、そのスタイルであることをチェックするツールが
存在すべきこととしてあれば、ネーミングルールとか些細なこととして考える必要がなくなる 動作確認ってdevtoolと JSFiddleのどっちがいいんかね? Three.js について、初心者です。
サンプルコードをそのまま書いて、実行したらエラーで実行できません
https://ideone.com/UOe4BF
どこが悪いか分かりませんか? window.addEventlistener("load",function(){
の所で、TypeError: window.addEventlistener is not a function
と言うエラーです。
書き方が違うのかも知れません 環境によりwebGL自体が使えないかも知れません
タイプミスが多いです。調べてみます。
ありがとうございました var a = [ "a", "i", "u", "e", "o", "k", "s" ];
という配列があって、
例えば
var b = a[ 5 ] + a[ 2 ] + a[ 6 ] + a[ 2 ] + a[ 5 ] + a[ 4 ];
とするのと同じ結果を得たいのですが、
var b = a.hoge(5, 2, 6, 2, 5, 4).join("");
や
var b = hoge(a, 5, 2, 6, 2, 5, 4).join("");
や
var b = hoge(a, [ 5, 2, 6, 2, 5, 4 ]).join("");
みたいな感じに短くかけたりしますか?標準関数?を使って >>92
[5,2,6,2,6,5,4].map(aIndex => a[aIndex]).join(""); >>92
今回はlodashを使うまでもないな。残念。
var a = [ "a", "i", "u", "e", "o", "k", "s" ];
var b = [5, 2, 6, 2, 5, 4].map(function(i){ return a[i] }).join('');
これでできるよ。
最近のブラウザだけとかbabel、typescriptを使うのであれば、以下のようにもっと短く書ける
var b = [5, 2, 6, 2, 5, 4].map(i => a[i]).join(''); このためだけにアンスコを使うということはありえないと思う
既にアンスコが導入されている場合であれば当然使うべきだと思う
何も前提の無い単発の質問では備考程度に遠慮すべきだと思う webでの動画閲覧環境を作っているのですが、
今動画を選択するたびにサーバにリクエストしてswfを毎回ロードしています。
swfオブジェクトをJavaScript側にロードさせておきたいのですが、swfオブジェクトは3つあります。
動画形式Aを再生するplayerA.swfと動画形式Bを再生するplayerB.swfと、
動画形式Cを再生するplayerA.swfのプラグインであるplayerC.swfです。
AとBは単純にswfを呼び出すだけなのですが、CはAに引数としてswfのpathを渡さないといけません。
ソースにすると、
<object data="playerA.swf">
<param name="FlashVars"plugin=playerC.swf">
</object>
こういう感じです。
playerCのバイナリをメモリにロードさせて、playerCという識別子を与えて、
js://playerCみたいにして呼び出したりする仕組みがあったりしませんか? BlobURLがあるが、Flash側で受け付けてくれるかは分からんし、そんなことしなくても普通はキャッシュが効く
問題になるはずのないことが問題になっているのなら、何かが根本的におかしい >>99
なるほど、ありがとうございます。
ようは304を返せばいいということですね。
簡単なwebサーバでいいので自前で実装していました。
適当に200返してたのが問題だったというわけですね。 var aaa = {bbb:{ccc: null}};
function foo(objname) {
let objname = eval(obj);
let newvar = .........
return newvar;
}
eval("aaa.bbb.ccc="+foo("aaa.bbb.ccc"));
こういうコードでevalを使わないやり方は可能でしょうか?
単にaaa.bbb.ccc = newvar;
でいいじゃないかと思うかもしれませんが、
実際は変更したいオブジェクトを列挙してforで同じ関数(foo)を使って変更します function foo(objname)のところ訂正です
let objname = eval(obj);
↓
let obj = eval(objname); function getValue(obj, objname){
return objname.split(".").reduce((o,p)=>o[p],obj);
}
obj = getValue("bbb.ccc", aaa);
実際にはnullチェックとか必要かもしれんが >>103
ありがとうございます
ありがたく使わせていただきます 無名関数をやっぱ使いまわしたくなった時、みんなどうしてる? 質問させて下さい
webアプリを作ってるんですが、なぜかiOSだけがセレクトボックスを選択直後にフリーズします。
エラーが出るのは以下のコードになります。
エラー回避策はエラー用の変数を作ってfor文の後でアラート表示させるようにしました。
これはiOSの仕様なのかコードの問題なのかどちらなのでしょうか?
ちなみにMac、Windows、アンドロイドは問題ありませんでした。
function selboxOnchange(){
var sel = document.getElementsByClassName('selelements');
for(var I = 0;i < sel.length;i++){
if(sel[I].selectedIndex == hoge[I].selectedIndex)
{
alert("コメント");
}
}
}; すみません。
一部、"i"が大文字になっていますが全て小文字です^^; onchangeからワンテンポ置いてやってみたら? 瑕疵担保責任(かしたんぽせきにん)
瑕疵担保責任のポイント
民法改正で事実上期限が「無制限」になった
バグや設計のミスなどは、瑕疵担保責任
納品物に不具合があれば損害賠償を請求される可能性もある
不具合を指摘されたらすぐに行動をとるべし
軽微なミスでも先延ばししない
http://www.atmarkit.co.jp/ait/articles/1706/26/news014.html
http://itpro.nikkeibp.co.jp/atcl/news/17/052601508/?rt=nocnt
改正法では欠陥に気付いてから1年以内にITベンダーに通知すれば、
通知後5年以内は修正や報酬の減額などを求められるとしている
全ベンダーが泣いた民法改正案を解説しよう その1
http://www.atmarkit.co.jp/ait/articles/1609/14/news009.html
http://www.atmarkit.co.jp/ait/articles/1609/14/news009_2.html
http://www.atmarkit.co.jp/ait/articles/1609/14/news009_3.html
ポイント1:修補や損害賠償、契約解除の期限がなくなる
従来あった「瑕疵担保期間は引き渡しから1年」という考えはなくなる。
条文にある通り、注文者は成果物が契約の目的に適合しないことを発見したら、
その「発見したときから1年以内」ならさまざまな請求ができる。発見が10年後なら、
11年後まで請求可能なのだ。
もっとも、現実のユーザーとベンダーの関係でも、たとえ契約書に「瑕疵担保責任期間は納品から1年と」明記されていても、
「2年目以降は不具合の修正に対応しない」と主張するベンダーはまれだ。多くの場合は、納品から何年たっても、
バグが見つかればユーザーのところに飛んで行き、無償で改修するだろう。 366 :nobodyさん 2017/05/29(月) 16:07:39.16 ID:6v4UcGhE
今回の民法改正、ソフトウェア受託開発の場合、(検収後ではなく)バグ発見後1年瑕疵担保責任があるということで、地獄かよ、と思ったが、
元々問題が起きがちな受託案件がビジネス的に成立しなくなることで強制的に業界再編につながるなら良いことかもと思うようになった。
一部で地獄を見ても。
https://twitter.com/yukihiro_matz/status/869061879389343744
367 :nobodyさん 2017/05/29(月) 16:28:06.55 ID:6v4UcGhE
ニュース - 改正民法が成立、「瑕疵担保責任」などシステム開発契約に影響大:ITpro
http://b.hatena.ne.jp/entry/itpro.nikkeibp.co.jp/atcl/news/17/052601508/
372 :nobodyさん2017/05/29(月) 19:10:37.12 ID:???
Railsでシステム作って納品する
↓
Railsはマイナー、メジャーのアップデートが半年以内に必ずある
↓
客がアップデートする。アップデートによるエラーやバグ、動作の不具合に気づく
↓
気づいてから1年以内に通知すれば、5年間無料保証ゲット
↓
つまりRailsがアップデートするたびに、無償の修正作業を発生するということかな
376 :nobodyさん2017/05/30(火) 09:20:20.09 ID:L5po86sS
>>378>>379>>375
客が瑕疵担保責任法の法改正を知ってくると思うから、今後5年無償保証をお願いされるだろう
営業がそれでも仕事を取ってこれるか?たぶん無理だろう。無限の直していたら赤字になる。
こういう保守に弱い言語、ころころ仕様が変わる言語は仕事として発生しなくなってくる。
これは変わり目だ。お前らも早く逃げたほうがいいぞ。RubyやPHPなど動的言語は確実に廃れる。
保守に強い言語のみ生き残れる。 1年リースにするなり、売り切り型にしなきゃ良いだけなんだよなぁ 質問です。次のコードはエラーになります。
var hoge=1;
if(true){
let hoge=2;
if(true){
let hoge=hoge;//エラーになる
console.log(hoge);//2が出力されて欲しい
}
}
グローバルでない、参照できる位置関係にある、同じ名前の変数を
参照することは可能ですか。どんな方法がありますか。 不可能です。そんなコードを書かないでください。
そしてlintツールを使ってください
そのようなコードを書いたら警告が出るようにできます。 基本的には不可能
ブロックを抜けたときにもとに戻したいのなら
入ったときにtmp変数にでも保存して出るときに書き戻すとかはできるよ ajaxでcors対応されていない他サイトのHTML取得したいんだけど、
jsonpで取得してもHTMLで返ってくるから
「Uncaught SyntaxError: Unexpected token <」
ってなるんだけど、回避方法って何があるの?
どなたか教えてください オフラインのローカルのみのjavascriptだけでは、
txt,tsv,csv,jsファイル等の読み込みは出来るようですが?
更新、書換え、上書き、書出しは出来ないのでしょうか? >>117
jQuery の設定項目を参照。色々できる
$.ajaxSetup({ // 全体の設定
data: {format: 'xml'},
timeout: 60 * 1000
});
jQuery で、Yahoo Query Language (YQL)を使って、
他のサイトにアクセスする方法もある
この板にはあまり人がいないから、web制作管理板で聞いて
>>118
Local Storage, Node.js, Electron とか?
この板にはあまり人がいないから、web制作管理板・WEBプログラミング板で聞いて ふだんExcelのVBA使いでこれならかなり本格的なこともできるスキルがあります。
でもWebに興味が出てきたのでJavascriptをメモ帳ではじめました。
不便なのはExcelVBAのような
・コード書くときのインテリセンスでの入力補助
・ブレークポイントを使ってF8のコマ送り
・F8のコマ送りのときに変数の値を見る
ことなどなど、メモ帳だから当然そんなのできません。
Javascriptの入門書はいつくか読んでますがそんな便利なことができる開発環境のことには全くふれていません。
Javascriptやってる人は開発ツールは何を使ってますか?
その使用率みたいな円グラフみたいなのもないでしょうか? >>120
vs.code で開発して chrome で確認の組み合わせが最強だよ
やりたいことはそれで全て可能だと思う
最近作ったゲーム
https://hasemonmon.net/df5/
オールJavascriptだよ
これからはJavaScriptの時代だから勉強しといて損は無いと思う IE11, Edge でも、F12 を押すと、「F12 開発者ツール」が起動する。
ブラウザで右クリックして「要素の検査」でも、起動する
F12 開発者ツールの使い方を参照
コンソール画面の下に、ソースコードを書いて、
「Ctrl + Enter」で実行できる >>121-122
ありがとうございます。研究してみます。 特定の文字({}等)で囲まれた部分 以外 の文字列を処理したい。replaceと正規表現で頑張ったのだけど、囲まれた部分まで文字列処理が行われてしまう。
どうしたら良いでしょうか? "abc{123}abc{123}".replace(/(.+?)({.+?})/g , "[$1]$2"); // -> "[abc]{123}[abc]{123}" 'abc{12{3}} abc{}'.replace(/([^{}]+?)({.*?})/g, '[$1]$2') //-> "[abc]{12{3}}[ abc]{}"
あとは後ろを関数にしてうまく行きそうです。ちょっとやってみます。
ありがとう 'abc{123}abc{123}abc'.replace(/(.+?)({.+?})/g, '[$1]$2') //-> "[abc]{123}[abc]{123}abc"
'abc123abc123abc'.replace(/(.+?)({.+?})/g, "[$1]$2") //-> "abc123abc123abc"
めっちゃ漏れるぅ "{123}abc{{abc".replace(/(\{.*?})|(.+?(?=\{.*?})|.+)/g, (不特定, 特定, 非特定) => 特定 || `<${非特定}>`);
改行を跨ぐなら.を[\s\S]に 正規表現は奥が深いですね……。これで入れ子でないキャプチャができるようになりました。
ありがとうございます。
入れ子はさすがに再帰しないと無理みたいですね。やってみます。 >>129
PEG.jsを使うって手もある。そっちの方が簡単かも。
あんまり正規表現で頑張っても可読性下がるしね //ボールクラス
var Ball = function() {
this.x = 0;//X座標
this.dx = 0;//X方向の速度
this.y = 0;//Y座標
this.dy = 0;//Y方向の速度
}
// 移動後の座標を求めて、呼び出し元のoldPosの値を更新したい
Ball.prototype.move = function(position, move) {
position += move;
}
var ball = new Ball();
ball.move(this.x, this.dx);//X方向の移動
ball.move(this.y, this.dy);//Y方向の移動
こんな感じで、クラスのメンバ変数の組を入力引数に
特定処理(この例ではmove)をして、その結果でメンバ変数の値を更新しようと思っています。
が、上記のmoveメソッドだとpositionが値渡しなのでBallのx, y, zは更新されません。
プリミティブ型でなくオブジェクト型をmoveに渡せばいいかな、と思って
Ball.prototype.move = function(positionAndMove) {
positionAndMove.positon += positionAndMove.move;
}
ball.move({position:this.x, move:this.dx});//X方向の移動
こんな感じで改造してみました…が、moveに渡した無名オブジェクトのpositionは
更新されているようですが、その元ネタのBallのthis.xは更新されません。
(無名オブジェクトを作る際に、this.xはただの値渡しであって
「無名オブジェクトのposition」とのつながりは無い?)
this.xを複数回書かずに済む、なにかスマートな方法は無いでしょうか? 上記Ballが複数あって、それぞれが自分の座標をメンバ変数として
持ってるイメージなんですが、設計上変なのですか? Ball.prototype.move = function() {
this.x += this.dx;
this.y += this.dy;
}
ball.move();//移動
普通はこうする 今時はES2015はどのブラウザでも動くんだからclass構文使いなよ たとえば select にonchange つけたとき
selectで何が選ばれたか はイベントオブジェクトに入っていない? >>133
>ball.move(this.x, this.dx);//X方向の移動
>ball.move(this.y, this.dy);//Y方向の移動
上記のコードのthisはballを指してない。実体はwindowだからundeifnedが入ってると思われる。
だからあえて踏襲するなら
ball.move(ball.x, ball.dx);//X方向の移動
ってことになる。
thisがそれぞれの文脈でどこを示しているかは勉強しなきゃいけないけど
thisがballのインスタンスになるのは今回はmoveの実装内だけ。 ゲームエンジンの、Cocos2d-x(JS版)では、
cc.Sprite(画像クラス)は、cc.Node から、派生しているけど、
cc.Node のメソッドも使える
getPosition(), getPositionX(), getPositionY(),
setPosition(newPosOrxValue, yValue), setPositionX(x), setPositionY(y)
getPosition()の戻り値は、cc.Point。
setPosition の引数は、(x, y)か、cc.Point(_x, _y)
this.setPosition(this.getPosition().x + 10, this.getPosition().y)
JavaScript版Cocos2d-x かんたんゲーム開発、2015
原題:Learning Cocos2d-JS Game Development
Emanuele Feronato 著
http://www.emanueleferonato.com/
著者のサイトでは、Phaser の作品が多い
Phaser(フェイザー)は、Pixi.jsをコアにして、
サウンドとか衝突判定とか物理演算を追加した2Dゲーム開発フレームワーク。
マルチプラットフォームで、オープンソース(MITライセンス) 皆様ありがとうございます。
結局、
var Ball = function() {
this.x = 0;//X座標
this.dx = 0;//X方向の速度
this.y = 0;//Y座標
this.dy = 0;//Y方向の速度
}を
var Ball = function() {
this.xParam = {position: 0, move: 0};//X座標(現在値、速度)
this.yParam = {position: 0, move: 0};//Y座標(現在値、速度)
}
と、各変数をオブジェクトに格納するよう変えて
Ball.prototype.move = function(positionAndMove) {
positionAndMove.positon += positionAndMove.move;
}
ball.move(ball.xParam);//X方向の移動
ball.move(ball.yParam);//Y方向の移動
のような感じでmoveを使用することで解決しました。 >>134
サンプルくらい単純ならそうしたのですが、実際の処理はボール移動ではなくもっと複雑です。
x, y…に該当する概念が7個くらいあり、
moveメソッドで見る変数も各々5種類くらいあります。
なので、そのやり方だと感覚的には
Ball.prototype.move = function() {
this.x += Math.min(this.constX * this.dx , this.minX) + this.adjustX…;
this.y += Math.min(this.constY * this.dx , this.minY) + this.adjustY…;
(以下5行以上コピペして一部だけ書き直し)
}
みたいなコードになってしまいます。
>>135
たしかに、class構文を使った決めた方が保守性がよくなりそうですね。
>>136
すみません、即席サンプルの単純ミスです。
>>138
誤解与えてすみません。「ボール移動」はただの単純化説明用サンプルです。
実際のコードでやっていることは全く関係ないです。 プログラミングしていくうちに、
Unity, UE4, Cocos2d-x(JS版), Godot などの、
ゲームエンジンへ移行していくはず
日本人の開発者は、jsdo.it でも作っている。
他人のソースコードも見れる エロ画像ブログ巡回してると画像の下に
「二次元画像詳細検索 Google画像検索」
とあって画像の詳細を知らんべることができる
これはJavaScriptで作られているようだが、詳細がよく解らない
どういった感じで作られているのでしょう? 高騰中の仮想通貨Liskがこれで作れるらしいんだが、詳細教えて JavaScript の勉強を始たばかりです。
言語のリファレンスになる本を探しているのですが、ないでしょうか?
いくつか買ってみたのですが、ブラウザオブジェクトの使い方ばかり書いてあります。(まあ仕方ないですが)
with文って何?とか、名前空間どうなってるのとか。昨日知ったのですが、セミコロンの自動挿入とか。そんなのが分かると嬉しいです。
よろしくお願いします。 mozilla developper network でかい本屋行ってサイか蝶が表紙の本をレジに持ってけ >>146-147
ありがとう。
ちなみにサイは買った。蝶は見て見るわ。
ECMA Script の仕様書が分かりやすいかも。
JS やってる人はどうしてるの?細かい仕様とか気にならないのかな。 mdn以上に正確に書かれている書籍はない
あるなら教えてくれ
ECMS scriptの仕様書は実装者向けで難解だ
mdnで曖昧な時に頑張って読む JavaScriptは仕様以外の部分が多いので
仕様だけをみても使い物にならんからな。
例えばブラウザの機能はすべてJavaScriptの仕様の範囲外だ 関数呼び出しで戻り値を受け取らなければ
その関数は今呼んだ関数が終わってから実行されるんですか? >>150
アホか?
どんな言語だって、開発対象への知識が必要なのは変わらない javascriptが特別なわけじゃない つまりどの言語でも
仕様だけを見ても使い物にはならないと言ってる >>150
そう。
なのに、「JavaScript 入門」はDOMの話。おかしいだろ。 > 仕様だけを見ても使い物にはならないと言ってる
そうは言っとらん
> JavaScriptは仕様以外の部分が多いので
> 仕様だけをみても使い物にならんからな。
javascriptが特殊だと言っている うむ、助詞は日本語ネイティヴ以外には難しいと言い訳はできるな
「javascriptも」のつもりで「javascriptは」と書いてしまった
朝鮮人ならありえる 違うぞ。
指摘されても認めてないだろ。本質的に分かってないんだよ。
間違ったんじゃない。間違っていることを認識出来てないんだ。
そして在日韓国人は「日本語が下手糞なこと」を絶対に認めない。
なぜならそれは彼等の存在意義に関わるかららしい。
(日本語が上手いというのが唯一本国韓国人に対するアピールポイントらしい)
だが実際はここで見れば分かるとおり、日本語も韓国語も駄目駄目だ。
だから彼等はまともな(厳密な)議論をしたことがない、というか成立しない。
つまり彼等は議論が出来ない、というか、
彼等内で行われている議論は全く正確さ/厳密さを欠いている物でしかない。
そして彼等はそれで議論が出来ていると勘違いしている。声闘の文化もあるしね。
これが本質的な問題で、いわゆる日本人の議論下手とは全く異なる方向なんだ。
日本人のは単に場慣れしてない、
或いは色々面倒になることを避けて意見を言わない、またはオブラートに包む、
みたいな感じだが、こちらが言ったことは確実に通じていて、
下手すれば助詞の一つで揚げ足を取られたり、いきなりブチ切れられたりする。
これなら放置しておいても場数を詰めば上達するし、
2chに来ている連中はそこそこ出来る奴が多いのも事実だ。
韓国人のは本気で通じてないんだよ。その知能がないんだ。
だから厳密な/正確な議論が出来る人達にとっては邪魔でしかない。
ところが彼等はそれで出来ていると勘違いしている。
というかそれ以上の厳密さで議論する場に参加したことがないから、
そういうまともな議論が出来る(存在する)ことを知らないんだよ。
だから自分たちのレベルが低いことを認識出来ない。
当然ここと同じ事を彼等が得意な(つもりの)韓国語でもやっているはずだし、
同様に本国韓国人にも嫌われるのは自然な成り行きだ。
もちろん他の理由も多々あるにしてもね。
韓国人死ね しかしこれは本当に本質的な問題で、ここでプチ日本語講座をやったところで解決しない。
馬鹿が馬鹿であることを自覚出来ないってのは常だからね。
短期的な解決法はとにかく韓国人というか
「議論が成立するレベルの日本語が使えない奴」を排除していくことだ。
これについては俺は何度も「お前ら自身が損をするから発言を慎め」と言ってきたが彼等は聞かない。
(まあ彼等は上手いつもりだからそうなるのも自然ではあるのだが)
だからどうにもならないよ。
レベルの低い奴が混ざるだけで迷惑だ、ということを彼等は認識出来てない。
そして彼等(というか在日韓国人コミュニティ)はこの理由で
「正統に排除」されるのを差別だといってゴネてきた連中だ。
東大が入試で馬鹿を「正統に排除」するのは区別であり、差別ではない。
同様に、2chで2chに不十分な日本語の奴を排除するのも区別でしかない。
彼等にはこれを理解する知能すらないんだ。
マジで彼等は腐っているし、本国韓国人からもゴミ扱いされて当然だ。
マジで韓国人は死ね
一朝一夕には解決しない。話しても通じない。
となると、「在日韓国人はいるだけで迷惑だ」ということを地道に彼等に教えてやるしかない。
在日韓国人が全員自殺してくれるのが一番助かるんだが。
なんつーか、彼等は迷惑行為を行っているのだが、その自覚がないんだよ。
そりゃ今後とも在日韓国人は死ねと言われ続けるだろうし、至極当然の成り行きでしかないのだが、
彼等はそれを差別だといってゴネるだろうし、
それに対して余計にブチ切れる奴もでるだろうしで、悪循環だね。
在日韓国人が全員自殺してこの悪循環を断ち切ることを切に願う。
つか、ゴキブリは半島に帰れマジで。 書き込み増えてないのに更新来てると思ったらそういう事か >>159
詳しすぎw
韓国人博士の商業を授けよう 俺は韓国人について詳しいのではなく、単純に状況を分析出来るだけだけどな。
匿名掲示板では不思議なことは起こらない、俺はこの点が気に入っている。
在日韓国人が本国でも嫌われているのは、在日韓国人自体がマジで糞だからだよ。
あらゆる点でね。ここに挙げたのも一つ。
C#のスレでも暴れてるだろ。
http://mevius.2ch.net/test/read.cgi/tech/1492843013/783
だが他の連中が呆れている。理由は、
1) そもそも日本人なら脳内補完されてしまう(気づかないかも、程度の誤字)
2) C#userなら当然何のことを言っているのか分かる
だからそこをあげつらうのはなんの為?って感じになってる。
ところが当の本人は本気で分かってなくて、煽って答えを出させようとしている。
マジで糞だろ。死ねでしかない。
在日韓国人みたいな馬鹿はいるだけで迷惑だ。
だから彼等が嫌われるのは当然であり、これは区別であり、差別ではない。
ということを周知徹底し、韓国人を無視するようにしていかないといけない。
つーか、そうしないと議論が進まない。
韓国人死ね
つっても結局は非韓三原則、これが一番分かりやすいのだが。
韓国人に対しては、
助けない、教えない、関わらない
しっかりと韓国人がクズであることを指摘しつつ、(攻撃されたら反論)
後は放置して勝手に死ぬのを待て、ってことだね。(助けない、教えない、関わらない)
韓国人に対してエネルギーを使うこと自体が勿体ない。 文字数制限の為、二回に分けて書き込ませていただきます。
各テーブルの背景色を条件に処理を分けたいと思い、いろいろと試していますが上手くいきません。
テスト用に書いたもので、背景色(#000000または#ffffff)ごとに合計値をresuleBまたはresultWに合計していきたいのですが、
背景色の取得がうまくいっていないようです。
今後別の処理を記述するため、できれば背景色をキーに分岐を行いたいと思っています。
解決の為、アドバイスをいただければと思います。
よろしくお願いいたします。 >>165
NGワードに引っかかってしまいコードが書き込めないのでまた、後ほど書き込ませていただきます。 function testForm(){
var table = document.getElementsByName("table");
var sumB = 0;
var sumW = 0;
for(i = 0 ; i <= 1 ; i++){
var line = table[i].parentNode;
var result = getComputedStyle(line,'');
if(result.background == "#000000"){sumB = sumB + parseInt(table[i].value);
}else{sumW = sumW + parseInt(table[i].value);}
}
var B = document.getElementById("resultB");
var W = document.getElementById("resultW");
B.innerHTML = sumB;W.innerHTML = sumW;
}
<table border="1">
<tr id = "line1" style="background-color:#000000">
<td><input type="text" name="table" value="0" onBlur=testForm()></td></tr>
<tr id = "line2" style="background-color:#ffffff">
<td><input type="text" name="table" value="0" onBlur=testForm()></td></tr>
</table>
<table border="1" style="width:30px;">
<tr id = "resultLine">
<td id = "resultB"></td>
<td id = "resultW"></td>
</tr>
</table>
</form>お願いいたします。 >>165
まず背景色をキーにするのはダメ
なぜなら色をどうするかはCSSの仕事だから。
背景色の代わりにクラスを使う
document.getElementsByNameで table を取ってくるのが意味不明
この場合だと tr だろう?
ループの終了判定が1固定なのがだめ。trの数にするべき 訂正。読み間違えた。ここはとりあえずOK。とりあえずだが
> document.getElementsByNameで table を取ってくるのが意味不明
> この場合だと tr だろう? id = "line1" とか id を付ける理由がわからん。
サンプルコードなら余計なものは消すべし
tableは複数変えてくるのであれば、
tablesとかいう変数にする。
が、そもそも変数名が適切じゃない。
とりあえずfield(fields)に解明する
.parentNodeじゃなくて、.parentNode.parentNode
でここまでは序の口 修正後
$(document).on('blur', '[name="input"]', function() {
const toInt = el => parseInt(el.value);
const getValues = selector => $(selector).find('[name="input"]').get().map(toInt);
$('#resultB').text(_.sum(getValues('.classB')));
$('#resultW').text(_.sum(getValues('.classW')));
});
<table border="1">
<tr class="classB">
<td><input type="text" name="input" value="0"></td>
</tr>
<tr class="classW">
<td><input type="text" name="input" value="0"></td>
</tr>
</table>
<table id="result" border="1">
<tr>
<td id="resultB"></td>
<td id="resultW"></td>
</tr>
</table>
.classB {
background-color: #000000;
}
.classW {
background-color: #ffffff;
}
#result {
width: 30px;
} >>168
ご回答ありがとうございます。
無事解決しました!
結果vbaで作り直すことになりましたが……
今回のことも一つの経験として、次につなげたいと思います。 ・「DOM要素」「JavaScriptオブジェクト」
「文字列」ってどういうふうに認識を分ければいいですか、
・どういうときに、「DOM要素」をいじり、
・どういううときに「JavaScriptオブジェクト」で処理し
・どういうときに「文字列」として扱うべきなのか教えてください。 ・具体例
> $0
<div class="guide">
<a 略> </a>"
|"<a 略> </a>"
|"<a 略> </a>"
|"<a </a>
</div>
------------------------------------------------------------------------------
> dir($0)
VM22805:1 div.guide
accessKey: ""
align: ""
assignedSlot: nullattributes:
NamedNodeMap {0: class, length: 1}
baseURI: "https://www.2ch.net/"childElementCount: 4
childNodes: (9) [text, a, text, a, text, a, text, a, text]
....
------------------------------------------------------------------------------
> $0.innerHTML
"
<a 略> </a>"
|"<a 略> </a>"
|"<a 略> </a>"
|"<a </a>
" 山田祥寛(よしひろ)、翔泳社
10日でおぼえる jQuery 入門教室 第2版
この本を読め http://www.myu.ac.jp/~akizuki/sct/js/picture/pc_size.htmlみたいに
入力して指定した要素(div等)の大きさをリアルタイムに変えられるようにしたいけど、コードうまくできない
Chromeとかのデベロッパーツールを使えばいいじゃんと言われるオチだけど、cssとか詳しくない人に入力してチェックしてもらうためなので
ググっても関係ない情報ばかり引っかかるお >>177
一行目から行くぞ。
今時DOCTYPEを使わないのはありえない
META HTTP-EQUIVが大文字だったり小文字だったり、意味もわからずコピペしている証拠
今時Shift_JISとかありえない
languageは古い属性いまどき使わない
関数の中の変数にvar(もしくはletやconst)がない
evalは使うな
; の前にスペースはいらない
document.size.value_xなんて参照はいまどきしないgetElement○○を使え
bgcolorなどの物理属性は使うなcssを使え
centerなどのタグも使うな
brは連続して使うな
tableじゃない場所にtableを使うな
20年ぐらい前に素人が書いたコードにしか見えない jqplotで凡例の項目の一部をデフォルトfalseにしたいのですが
どのようにすればできるでしょうか?
例えば以下のサンプルサイト様の凡例「花子」を
初期起動時にはデフォルトでfalseにするイメージです
http://alphasis.info/2012/04/jquery-plugin-jqplot-line_charts-legend-numberrows/
よろしくお願いします web制作管理板の、jQuery スレに、書き込んだ方が良さそう すみません、自分一人ではどうしても解決できないことが有ってご質問させていただきます。
【やりたいこと】
任意の数の制御点(0=≦x =<511、0=< y =<1000)を格納した配列を基に、三次Bsplin補完を実行し、
生成された曲線の座標からx=0からx=511までをインデックスとして、y座標を出力したいのです。
任意の数の制御点を生成して、昇順に並べる関数は作りました。
また、Bsplin補完を実際に生成する関数もネットから拾ってきて既に出来ているものがあります。
次にコードを載せます。 function interpolation(top_elements){
var sp = new Spline();
sp.init(top_elements);
var t = variation;/* any value as parameter */ ;
var val = sp.culc(t);
}
このようなものです。top_elementsは私が作った[x,y]を任意個格納した二次元配列です。
Spline()がBspline補完をする、外部から拝借した関数になります。
tの値を変えたりして何度かやっているのですが、曲線を生成した、ということは、
xもyも連続的なはずですよね?xが512個のインデックスだとしたら、それに対応するyは
当然滑らかにはならないでしょうが、それでもいきなり飛び出た値が出るとか、そういったことはないと思います。
今のままだと、ほとんどxの値に対してランダムというか、作っている人間には突飛な値ばかり出力されてしまいます。
ようするに滑らかな曲線にならないのです。
どなたかご教授お願いします・・・Spline関数に間違いはないと思います。 補遺:二次元配列top_elementsは、xの昇順になっています。 アルゴリズム調べて自分で書けよ
十数行で書けるんだからさ >>182
jquery寄りの投稿でした
出直してきます >>186
そうします。
そもそもスプライン補完とスプライン曲線を混同していました。
制御点の間を結ぶのがスプライン補完なんですね・・・
勉強不足で失礼しました。 別に宿題でも良いんだが
この手のアルゴリズムはちょっと調べたらCやJavaなんかでの実装が山ほど見つかるじゃん
コピペ手直しならまだ宿題やったってことで良いと思うけど
そこまで人にさせるのはちょっとね すみません質問なのですが
HTMLファイルを IE11 でローカルで開いて遊ぶゲームの制作中で
データを保存する機能の部分でエラーが出ます。
Chromeだと問題ないのですがIE11だと動きません。
(未定義または NULL 参照のプロパティ 'setItem' は取得できません)
var storage = localStorage;
storage.setItem("item1", "soda");
console.log(storage.getItem("item1"));
IE11の仕様でローカル書込できない場合
何か回避方法はありますでしょうか。 ローカルで開いてもらうんなら
そもそもElectronとか使って配布すれば良いじゃない jagarikin
スーパー鳥スロット
http://jsdo.it/jagarikin/EjpL
これを参照。
ソースコード中を「Storage」で検索して、研究しろ 次々にDOMの内容が時間とともに書き換わるホームページで
特定の要素が開いたときにすでに存在しているか、これから存在するか、
の2パターンのうち、存在するまで待って何かするにはどうすればいいですか。
やったことはタイマーで3秒くらい待ってから調べる方法ですが
低スペックのパソコンだと時間がズレるのでつかえませんでした。 ハックならsetTimeoutで十分でしょ
きっちりやりたいのならMutationObserverでも試してみたら? >>193
>>194
助言ありがとうございます。
これらを試してみます。 スマホのwebアプリを作ってるのですが、beforeunloadのようにホーム画面に戻った時や
強制終了した時に発火するイベントはありますか?
iOSとandroidの両方に対応させたいです。
宜しくお願い致します。 phantomJS使って画面キャプチャして保存してるんですが
どうしても画像が保存されません…
htmlを出力してみるとアクセスは出来てるみたいなんですが。
コードは以下です。
var page = require('webpage').create();
page.open('http://yahoo.co.jp', function(status) {
console.log("Status: " + status);
if(status === "success") {
page.render('example.png');
}
phantom.exit();
}); http://www.ugtop.com/spill.shtml
ここ見るとMIMEタイプが以下になってるのが原因でしょうか?
普通のブラウザでアクセスするのと比較するとこれくらいしか違いがないので。
[phantomJS]
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
[Chrome]
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 >page.render('example.png');
render は、画面を保存する関数なのか? >>202
ここ見てやったんですが、保存までやってくれるんじゃないんですかね?
ttps://qiita.com/makoto1007/items/a54ff3ded2114a0d5433 1行ずつ、デバッグ実行して、エラーメッセージを取得して、そのメッセージで検索する
ファイルI/O 関連のエラーなら、ブラウザが対応していないとか、
フォルダが無いとか、書き込みできないとか、アクセス権限とか、色々ある
まず、どの原因か、エラーメッセージを取得して、解明する
Linux なら、strace のような、
OS のAPI の呼び出しをチェックするような、コマンドがあって、
どのAPIでエラーが起こっているのか、わかるけど function Hoge() {
}
Hoge.piyo = 123;
var hoge = new Hoge();
とかした場合にhogeからHoge.piyoにアクセスする方法はある? 関数をコンストラクタにして、インスタンスを作りたいのか?
var A = function(x) {
this.y = x;
}
var aa = new A(3);
var bb = new A('a');
console.log(aa, bb); これとは意図が違うの?
function Hoge() {
}
Hoge.prototype.piyo = 123;
var hoge = new Hoge();
console.log(hoge.piyo); インスタンスの意味がわからないのなら、
オブジェクト指向を知らないという事だから、JavaScript は無理
JS は、prototype と言って、普通のオブジェクト指向じゃないから、さらにややこしい
まずこの本で、普通のオブジェクト指向を学ぶ。
スッキリわかる Java入門 第2版、2014
それから、JSのprototype を学ぶ いきなりprototypeでいいんじゃないかな。
たしかにjsのprototypeは分かりにくいけどクラス使う言語からやってくると、もっとわかんなくなりそう JavaScriptでもclassからやったほうがいいんじゃないかな?
classほうがわかりやすいし。それからprototypeでも遅くはないよ。
そもそもprototypeって普段から意識して使ったこと無いしね
内部実装よりも言語仕様の方が重要 分かりにくいのはprototypeプロパティの意義であって
それはプロトタイプベースの本質ともオブジェクト指向の本質とも関係はなく
ただのJSのチンケな旧クラスシステムということでしかない
学習としては__proto__を使って素直で本質的なプロトタイプベースOOPを覚えるか
class構文を使ってよりまともな新クラスシステムに慣れる形が良い class {
プロパティ
メソッド
}
普通の言語で、これで済む所を、JS では自分で実装していかないといけない
メソッドは、__proto__ で、親クラスへつなげて行くとか、
実行環境を作る人と、同じ技術を学ばなければならない。
こんなのは、インタープリタを作る人の話
オブジェクト指向をわかっていない奴だと、
.constructor, .prototype とか、何もわからずに使うだけ それはちょっと違うかな
物は言いようでクラスに縛られること無くOOPが出来るというのはプロトタイプベースのメリットだけど、
だから自作しないといけないというわけではなくてプロトタイプベースに標準のクラスシステムがあっても何も矛盾しない
というかJSはES5までプロトタイプの設定ができなくて
予め用意された貧弱なクラスシステムを使わざるを得ないといけないということが問題で、
むしろ変わったクラスベース言語と言っても良いくらいだった
.constructor, .prototypeもオブジェクト指向の本質とは何の関係もない、ただJSのクラスシステムの癖なだけ
というか元々JSは手続き型チックに使うことを想定された簡潔なDOM操作スクリプト言語として作られたのであって
それに一応OOPもできますよと言うことでnew演算子を取ってつけただけ
プロトタイプベースなのも、崇高な目的があるわけじゃなくて
OOPが最低限できる素朴な仕組みを用意できれば良かったから なんでもありの言語にお堅い規約やらなんやらを詰め込もうとするから無理がでてくる まあ単に素朴なだけだけどね
鋼の様な硬い制限は言語のメリットを殺すだけで良くないが、一方で柔軟さ活かせばゴムの様に「矯正力」を発揮させる事ができる
固い考え方に於いての問題を問題として弾くのではなく、問題を飲み込み問題では無くす事ができる
その様にJSらしいプログラミング思想を受け入れることがJS克服の鍵 jsは凄くやらかい言語だよね。欲を言えばマクロが欲しいけど、現状でも割と何でも出来る マクロはsweet.js型のが検討された事があるがまだまだデコレータとか先に検討すべき機能はたくさんあるし
Object.observeみたいにその時の流行りと勢いで大胆な機能を入れると、後悔することが教訓になっているので慎重にもなるだろう
今は立案から策定までのペースが早くて10年後もその機能があって良いのかを考えにくくなってる
慎重で優秀なメンバーがいるおかげか高Stageでギリギリ落とされるものもチラホラ
その時は不満でも1年くらいして落ち着いて考えてみるとやっぱり入れ無くて良かったのかなと思える そういえば末尾最適化が来てたっけChromeに
あれアロー関数かつ三項演算子でも使えるんかね。今度実験してみよ すみません洋書でも知ってたら教えて頂きたいのですが、
jqueryをネイティブのJSに書き直す方法を網羅した
リファレンス本や虎巻、早見表等の書籍がありましたら
教えて下さい。 >>221
不完全なのならネットにいくらでもあると思う。
でも網羅してるのはないだろうね。
例えば、onの二番目の引数にselectorを使用した書き方(旧delegate)とか
置き換える方法が書いてあるの見たことない。
http://js.studio-kingdom.com/jquery/events/delegate
網羅しているのがあれば、jQueryがどれだけ複雑な処理を
簡単にかけるかってのがよく分かるんだけどな。
この際だからネイティブのJSに置き換えるんじゃなくて
ReactとかAngularに置き換えたら?
はっきり言って他のフレームワークに置き換える意味はあるけど
jQueryをネイティブのJSに置き換える意味は殆どないよ jQuery は、タグにイベントハンドラーを付けて、
そのタグの先祖のタグを削除しても、メモリリークをしないほど、すごい! jQueryをどう使ってるかによるんじゃない?
Promise、Animation、Fetchなんかは置き換えできるよね
でも一番地味な要素の取得・操作やイベント周りは結局ラッパーを書くことになると思うよ
そこだけjQuery使うというのも大有りだけど、もしasync-awaitを広範囲に使っているのなら
組み合わせが難しくなるので完全に外すことを検討して良いと思う
awaitとイベントを柔和させるためにはasync-iteratorやObservableが必要だけど、まだ実装されてないからね
まあwhile(await)を使って工夫すればなんとかそれっぽく書けるんだけど、
今はまだObservable系のフレームワーク使った方が良いかもね jQueryのAjaxは、Fetchには置き換えられないよ。
Fetchは仕様のレベルでJavaScriptのXMLHttpRequestの機能の
一部しかサポートされていない。今新しい仕様策定中
Promise(Deffered)は仕様が少し違うけど、
これ実質Ajaxぐらいしか使ってないので、Fetchが置き換えれないのなら
Promiseに置き換える作業も発生しない。
Animationは置き換えは置き換えでもJavaScriptではなくCSSに置き換えだね
jQueryを使ったコードがたくさんあるなら、比較的最近のブラウザでしか
動かないasync-awaitを使っていることはないだろう
将来はasync-iteratorやObservableに変わるということは
今JavaScriptネイティブの古き良きaddEventListenerに変更する意味はあるのだろうか?
あと数年ブラウザネイティブでasync-iteratorやObservableがサポートされるまで
jQueryのままで良いんじゃね? どうせまた変えなきゃいけなくなるし。
コードは少ないほうが置き換える手間も少なくなるよ Fetchで置き換えられない具体的で有意義な例を出して欲しい
例えばキャンセルは出来るという議論前出てたよね 皆さんご助言ありがとうございます。
ReactとかAngularも検討してみます。
ネイティブの実装方法知らなくても
結果が同じなら書き換えなくていいかもです。
どうもありがとうございます。 >>224は脱jQueryの指針を表したつもりで
jQueryのそれと全く同じ使い勝手のものが標準にあると言う気もないけど
そもそもjQueryの機能を完全にカバーできるかで考えるのも変だと思うけどな
因みにキャンセルや進歩状況はbody使えばできるんでなかったか? 調べてみた
キャンセル:
res = await fetch(''); reader = res.body.getReader(); reader.cancel(); OR res.body.cancel()
ダウンロードプログレス:
res = await fetch(''); reader = res.body.getReader(); ......
アップロードプログレス:
(できない)
ただし注意点としてプログレスは勿論キャンセルも実質、最初からReadableStreamで取って行ってるときでないと使えない
つまり、req.text()と先にしておいて、後でそれを予想外に長引いているからとreq.body.cancel()などキャンセルしようということはできない
まあプログレスやキャンセルが必要なのって大きいファイルの取得のときでしょ、
それで大きいファイル取得するときは最初からblobチャンク取っていく形で良いでしょ、ってことなのかもしれないが
一応素晴らしい解決方法もある
Response、body、ReadableStreamが再利用不可なのが問題なので、新しく作ってバイパスしてやればいい
つまり、ストリームに割り込むという考え方が必要
res = await fetch(''); reader = req.body.getReader();
res2 = new Response( new ReadableStream({...readerから読み込む...}), {...ヘッダを複製...}); ←キャンセルしたりプログレスが取れる
text = await res2.text() あーでもアップロードプログレスはできないって情報あったけど
よく考えたらrequest bodyにストリーム使えるわけだから出来そうだな JavaScriptの配列で中身はあるのにforinがまわらない、chromeの開発ツールで見ると1行目の[]の中身がなくて、>でオブジェクト開くと中身があるみたいな状態なんだけど、どなたか経験あります?
説明が難しくて伝わらなかったらごめん Array.prototype.forEach() を使う
for in は使わない 配列(Array)の場合はfor inじゃなくてfor(var i=...) とか forEachを使う
詳しくはググれ 配列(Array)の場合はfor inじゃなくてfor(var i=...) とか forEachを使うのはなぜですか? >>238
そうするとわたしの秘密の情報も漏れてしまうのでイヤです。 >>241
早く。こっちは準備OKだよ。
ディスプレイから指出して! >>242
じゃいくよ。
あなたも指出して。
_n
( l _、_
\ \ ( <_,` )
ヽ___ ̄ ̄ )
/ /
「指切りげんまんウソついたら針1000本の〜ます」 指出してるよ。お前のディスプレイが対応してないんじゃないの? 自分が嘘をついたからって、
他人も同じだと思わないように >>239
知らない間に私に成り代わった何者かが
投稿していたようだ。
foreachね。やってみるわ。
サンクス すまん、あと連想配列なんだわ。
キャプチャは今携帯だから貼れないから後ではる 配列じゃなくて連想配列?
じゃあそれこそが原因じゃん 自己解決しました。
ファイルを配列に打ち込むライブラリが非同期だったので、処理で使えなかったみたい。
初歩的なミスでした 多分もう少し、『誠実に』質問できてたらその日中に解決したと思うよ
ついでに見てる人を困らせることも荒らされることも無かった node.jsの質問もここで大丈夫ですか?
winstonで取得したdiscordのログをdropboxに上げたいんですが、
ローカルにファイルは保存されているのに
ファイル名の変数が未定義とのエラーが出ます
どうすればうまく定義できるんでしょうか?
https://imgur.com/6Pk8q1b
実際の実行結果がこれで
https://imgur.com/ti3Pdkp
ローカルのファイル一覧がこれです
何度も試した結果大量のファイルが溜まっています
https://www.axfc.net/u/3860035?key=source
件のコードがこれです
スクリプトの名前は読み替えて下さい
まだ書きかけなので不要なライブラリも呼び出したりしており、
スパゲティ化してると思いますがご容赦ください
よろしくお願いします ひとまず自己解決
varとかconstとかってローカル変数だったのね……
普段使わないから知らなかった
スレ汚し失礼しました コメントで
/*!
...
*/
のように ! がついてるコメントの名称と意味を教えてください SASS なら、圧縮しても削除されないコメントだけど Googleは最近そういう記号でもまともに検索できるようになったんだからググったら良いと思うよ 初心者です。「this. は.以降の変数を自分自身のコンパイラーとして呼べる」
と書籍に書いてあったのですが、イマイチ分かりません。
噛み砕いて教えていただけたら嬉しいです >>260
何その書籍。なんてやつ?
捨てていいよ。 Haxe の、this は、常にインスタンス自信を指すけど、
悪名高い、JavaScript のthisは、そうじゃないから嫌われている。
すごく複雑だから、検索して 全然複雑じゃない
複雑だと思うから複雑なだけであって、実際は第0番目の引数ということでしか無い
引数が色んな値になり得るのは当たり前で、どんな場合にどんな値が来るのかを知らないといけないのも当然
難しく考える必要は一切ない >>264
これな。関数a内でthisが使われていた場合
aの呼び出し方でthisが何かが決まる
somthing.a() だったら a内のthisはsomthingを示す。
a() だったらwindow.a() or global.a()のシンタックスシュガーと考えるので
a内のthisはwindow or globalとなる。
a = a.bind(something) ってすると、
関数aのthisはsomethingに強制できるから
a() だとしてもthisはsomthingを指す。 応用の部分がややこしいだけで、基本はメソッドを呼び出した時のオブジェクト(インスタンス)自身
基本を理解してないのに応用から始めるから理解できないだけ >>262
260の者です。
正確に覚えていないのですが、このような趣旨が書かれていました。
僕の勝手な解釈で投稿した感じです >>267
エスパーすると、コンパイラーではなくレシーバーだろ、つまり
proto = { prop: hoge }
obj = Object.create(proto)
のとき、obj.propと記述すると
ベースがproto、参照名がprop、this値がobjという参照型の値が作られる
その値が解決されるときにthis値のobjをレシーバーとして、参照名と共に
ベースであるprotoの[[Get]]関数が呼ばれる
もし直接解決の代わりに()演算子によって関数呼び出しされると
結果的にthis値のobjが解決後の関数値をもって作られたコンテキスト上でthis変数のように振る舞う >>271
webpackやGruntやGulpやら、何種類もある
ビルド/ビルドツールとかタスクランナーと呼ばれてる
SASSに相当するのは一般名AltJS、具体名はTypeScript、CoffeeScriptなどなど > SASSに相当するのは一般名AltJS、具体名はTypeScript、CoffeeScriptなどなど
はい、はずれ〜ワラワラ
SASSはCSSにコンパイルするもので、AltJSじゃありませ〜ん。JSなんてどこにも出てきませ〜ん /*! ←このコメントの名称を聞いてるのですが・・・ >>257
多分Qt形式のドキュメントコメント。
doxygenで使ったりする。
間違ってたらごめん。 つか、以前唐突に何も根拠なく「韓国人は優秀ニダ」と連呼し始めたのはこれかよ。
韓国政府、日本に関係改善の意思を伝える「韓国人材の日本企業への就職拡大の必要性を強調。日本も共感」★4
http://lavender.5ch.net/test/read.cgi/news4plus/1510660601/
韓国って国家単位で詐欺してるよな。
韓国人なんて詐欺国家の末端構成員だから全く信用ならねえ。
つか、あいつら嘘つき過ぎてて、辻褄とかそういうの考えないのな。
韓国人が優秀なことにするのなら、頭脳流出の心配を一ミリでもしろよアホ共め。
韓国人死ね javascript勉強中の初心者です。
宜しくお願いします。
伝の心という難病患者さんが使用するソフトがあるのですが、
https://www.youtube.com/watch?v=GpcY_UMoiLY&t=97s
このように、
ボタンを自動で選択して、一定時間後自動で隣の項目に移動し、最後はまたもとのボタンに戻る
というコードをどう書いたらいいのか教えていただけませんでしょうか。
自分なりに調べて、setTimeoutなどがあるというのはわかったのですが
何分初心者なのでうまく行きません。
宜しくお願いします。 >>279
そのビデオは入力支援機器で操作してるんだろ >>279
伝の心久しぶりに聞いたな。専門分野だ。
画面のコントロールにID振っておいて、
タイマーのメインループで一つずつ「次のコントロール」を選んでる
var current = 0
var max=10
function selNext(){
$('#ctr'+current).focus()
current=(current+1) % max
}
みたいになってる。 障害者の人の操作体系、日本語入力のときの句点の次には割り込みで確定に一度フォーカスするとか、色々小細工があったはず。 TAB順でいいなら、一定時間後にタブ押すとかTabIndexだっけ?を使えば良いかもな
ID順にならない移動があるなら
['#a', '#c,' '#d'] みたいに配列に入れておいて
その順番での移動を再生するみたいな感じになるだろうな >>279
sleep()は無いけどsetTimeoutを自分で呼べばとりあえずforっぽく書ける
https://jsfiddle.net/avp7hjvw/show/
他にはsetIntervalとgeneratorとの組合せとかも出来るけど、
https://jsfiddle.net/74srLa7L/show/
async/awaitが汎用性が高いのでオススメ
一旦sleep()を自作すればほぼ普通の流れで書ける
https://jsfiddle.net/4ntz4fju/show/ >>284
setIntervalが一番近い動き。
このカーソルと言うか選択肢移動は経時で自動的に順番に選択されて、
決定にあたるキー操作のみでユーザーは操作する。瞬目をプルキンエ像から判定とか、マイクロスイッチを辛うじてでも動く部分で押すとか。
>>283
が、決定の差し込みとかダイアログの選択肢への切り替えとか考えるとベストだと思うけど、
確か幾つかの操作体系自体がパナのパテントだから調べないといかんはず。 ブレークポイントでデバッグする方法について教えてください
Window.openした後の行でブレークするにはどうすればよいのでしょうか?
F12画面を常に表示させても新しいタブやウィンドウが表示させた後では間に合いません。 プルダウンでdefaultのままだった場合に送信ボタンが押せないようにしたいのですがどうすればいいでしょうか? onchangeイベントで切り替えればそれっぽくはなるんじゃね
https://jsfiddle.net/znz8vtdc/ >>289
addEventListener使ったほうが良いよ。
https://jsfiddle.net/znz8vtdc/1/
それと使わなくていいならform属性はまだ使いたくないな
IEで対応してない
ついでにjQueryで書き直したのがこれ
https://jsfiddle.net/znz8vtdc/2/ >>289
>>290
ありがとうございます
イメージもできたので実装してみます >>287
ありがとうございます。
alertより全然いいですね。
ただ、ソースに手を入れずブレークする方法ないですかね。
ユーザーのシステムから自社システムにリダイレクトして自社システムに入ってくるので、できれば自社システムで解決したいです。 FireGestureやFoxyGesturesのJS記述に関する質問は大丈夫でしょうか。
他に飛んだほうがよければ教えていただけると助かります。 node.jsではプログラム名を記述せずとも
node .
でプログラムを実行出来ますが、
プログラム名はどう推定しているのでしょうか?
package.jsonを見て決めていると思っていたのですが、
package.jsonがなくてもindex.jsを実行しました 答え自分で言ってるじゃん
そのくらい雰囲気で感じ取れなきゃダメだよ nodejs index.js
で検索するくらいの知能が無いのか? package.jsonがなければindex.jsを実行するようになっているんですね
>>296
うすうす分かってはいましたが、確かめたかったのです
>>297
ググって自己解決すればそれで終わりですが
質問をすれば、>>298のように知らなかった人も知ることが出来ますよね?
何のための質問スレだと思ってるんですか? ここは自ら学ぼうとしたけどどうしてもわからない人のための救済スレだよ
ググるなんて一番最初にすること >>299
日本語読めないゴミクズは消えろ 二度と来るな
>(4) 常に自発的に調べる心構えを持ってください。
> 具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
> わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。 >>301
役に立たないテンプレに従う必要などありませんよ
ただの書かれた文字です
法律でもなければ憲法でもないのです
分かりますね? node.jsにはrequireをしなくても使えるコアモジュールがありますが
そういうモジュールのことを何と呼びますか?
node.jsに標準添付のモジュールを標準モジュール、
グローバルオブジェクトとして組み込まれているこの種のモジュールのことを
コアモジュール、と呼ぶと思っていたのですが
コアモジュールは標準添付のモジュールのことでした
ではグローバルオブジェクト化されているモジュールの呼び名は?
ドキュメントを見ても、それっぽい名前がない気がします
どうなのでしょうか? この板には、荒らしが多い
荒らしに構うな。
荒らしと会話するな >>305
ここは質問スレです
ゴミというのは質問と回答以外の書き込みをする者のことです
分かりますね? >>304
ないのですか?
「グローバルオブジェクト化されたコアモジュール」
とでも呼ぶしかないのでしょうか? >>307
最高に頭が悪いな
弱者は強者の作ったルールに従わなければならない
このスレでは情報を持つものすなわちオレが強者で、情報を持ってなくて質問しているお前が弱者だ
わかるか? ゴミクズ >>309
大抵の質問スレには、
質問者になら無知で無能な自分も偉そうに出来ると勘違いした、
あなたのような最底辺のドクズが巣くっているものです
ですから自分がまず質問スレですることは、あなたのような連中を追い出すことです
見るたびに殴りつけますので、今後お見知りおきを。
分かりましたね? 荒らしに構うな。
荒らしと会話するな
荒らしと会話する者も、荒らしと同じ! >>311
お前の無能っぷりは当たり前に出来る検索すら出来ない事で証明されている
知能が劣っているお前が、どういう手段で追い出してくれるのか楽しみでしょうがない
まあ、頑張ってみろ node.jsに、rubyで言うirbみたいな
インタラクティブなインターフェイスはないでしょうか? >>311
おい、ゴミクズ
追い出すはどうした? 逃げ出すの間違いか? >>316
わっ。nodeにこんな機能があったとは思っていませんでした
ありがとうございました
>>317
ハーゲ 頭悪そうな質問だと思ってたら 案の定ゴミクズの質問だったか?
追い出すはどうした? 荒らしに構うな。
荒らしと会話するな。
会話すると、ずっと荒らしが続くだけ
荒らしと会話する者も、荒らしと同じやぞ! JavaScriptではPHPの$$varみたいなことは出来ないのでしょうか?
node.jsでモジュールを読むのに、一行ずつrequireを記述するのではなく
モジュールを記述した配列を回して読みたいです
全てのモジュールを格納するオブジェクトを作って
各モジュールをそのプロパティにするようにしたら出来ると思いますが
それはnode.jsの作法的に良くないのでしょうか? モジュールを読むたびに名前空間をガンガン汚していくのってどうなんでしょう
変数名を決める時にも、
その変数名が何らかのモジュールの名前で使われていないかを
いちいち気にしないといけないのってイケてないですよね?
モジュールは他の変数とのバッティングが起きないように、
特有のプレフィックスを付けた変数に読むようにした方がいいと思います
$fsとか$httpとか。
そうですね? >>322
なんかわざとらしいけど、今時のやり方をすれば
グローバル変数は使わないで作れる
そのためのモジュールシステム Babel なら、import 文を使う
import A from './a/A'
import React from 'react' importですか
見た記憶はありますが何か分かっていませんでした
調べてみます
ありがとうございました 検索すればすぐにヒットする愚問をスレ違いのスレで垂れ流してるゴミクズ
追い出すはどうした?
>>320
お前が一番相手してるぞ マヌケ PHPはphp.netにドキュメントが集積されていて
そこを検索すれば大抵のことは分かるのですが、
node.jsにはそういう場所はないのでしょうか?
https://nodejs.org/にコアモジュールのドキュメントはありますが
いまいち見にくい感じです
この公式サイトがnode.jsの最良のドキュメントなのでしょうか?
いいドキュメントのある場所があれば教えて下さい PHPは言語及び環境と豊富なAPIのセットだが
Nodeはサーバ構築の為の最低限の環境とAPIしかない
それを知るにはそこで十分 そうですか
どうも引っかかるところが多くて学習がサクサク進まない気がしますが
慣れでしょうか
ありがとうございました 基本的なJSの非同期の使いこなしと
サーバーの立場は知っておかないと躓くかもな >>329
多分node.jsを体系的に学ぼうとするからサクサク進まないのでは?
何がやりたいかによって全然変わってくるからなぁ
実はnpmを使いたいだけだったとかあり得る話 過去の経緯を知っていると最近のjsとnodeはよくなってきたなあとも思えるが、初学者にはまだまだとっちらかった学びにくい界隈だろうな >>332
大概ReactとかVueとかなら簡単に使えるようにするためのbootstrap環境用意してるからそっちを使ったほうがいい。 MicrosoftやgithubのログインみたいにID パスワードが合ってるかどうかの判断を画面切り替えないでやるのってJavaScriptでは無理なんかな? 検索の仕方が悪いのかな
全然見つからん…
是非教えて頂きたい JSとしてはただサーバーに問い合わせるだけだぞ?
Ajaxじゃん
実際ログイン管理をするのはサーバー 例えば、localStorage から値を取得して、それと比較して
一致していれば、
<div id="passw">OK</div>
不一致なら、
<div id="passw">ダメ</div>
とかに更新するだけだろ
実際には、localStorage じゃなくて、どこかのサーバーに問い合わせるけど <div id="message">…</div>
divタグ内の要素が増えたとき、もしくは
特定の関数が呼ばれたときハンドリングする方法はありませんか?
onchangeでもonreloadでも感知できません。 >>337-340
キーワードを調べてみてイメージはできたのでやってみます
ありがとうございました >>341-342
React では、DOM の追加・削除・変更のタイミングで、
ライフサイクル・メソッドが呼ばれるけど
>>343
DOM 操作なら、jQuery が簡単
それと、質問はこのスレよりも、web制作管理板のJS スレで聞いた方が良い。
向こうの板の方が、人が多いから Web制作板は荒れているので、プログラム板で質問しても良い
実際には人数が多いのではなく、少人数が馴れ合ってるだけ VSCodeはデフォルトでnode.jsのデバッグができるんですね
これはすごくいいのでは?
当然ですが標準モジュールもJavaScriptで書かれているので、
デバッガで追っていけば関数のインターフェイスや処理も良く分かります
PHPに比べてドキュメントの整備がいまいちに見えたのは、
ソースコードを見れば分かるだろということかもしれませんね Nodeの数少なく基礎的で単純なAPIに
あれ以上何の説明がいると言うんだろうか? >>345
せやね。俺はこっちも見てるのでどちらでも答えるよ >>347
「ゆとり女には無理」って説明だろうね。
つかNodeスレで聞けよな。
ただまあここら辺がPHPerが馬鹿にされる原因でもあるのだろう。
PHPは言語が糞過ぎて類推が利かなすぎる。だから全部マニュアルを読んで覚える物だと感違いしてるのさ。 >>347
php.netと比べればいくらでも改善の余地が見つかると思いますが? >>349
web制作版がクライアントサイドJavaScript、
プログラム板がサーバサイドJavaScript、
つまりnode.js用のスレだと認識していますが違うのですか?
おかしなことを言う人がいるものですね >>351
どこを見てそんな解釈が?
おまえは多分一生上達しないタイプだ。偶にいるんだよ、何でこいつは相変わらずセンス無いままなのだろう、て奴が。
多分、プログラマ辞めて違う職種に転職した方がいいぞマジで。見込みなしだよ。 >>351
その理屈だと本来WebProg板を探すべき VSCodeのIntelliSenseで出てくるヒントが
何か見覚えのないよく分からない記法なので、
これは何なのか?と思っていたのですが、TypeScriptのようです
普通のJavaScriptで書かれた情報が出てきて欲しいのですが、
どう設定すればいいのでしょうか?
>>352
頭の悪い意見ですね
説得力皆無です
>>353
それはごもっともです 入力補完は型定義ファイル(拡張子d.ts)によって行われる
そしてこの型定義ファイルとはTypeScriptのファイル
ということのようなので、TypeScriptによる説明しかないのでしょうか?
むしろTypeScriptを使えという圧を感じないでもありません、
(VSCodeもTypeScriptもMS製なので)
TypeScriptはAngularにも採用されているし、おそらくいいものなのでしょうけど、
今すぐに使いたいとも思いません
単にJSDocのコメントを表示して欲しいだけなのですが
それは出来ないのでしょうか? 相変わらず検索ということをしないなぁ
自分が書いた文そのままアドレスバーに打ち込めよ TypeScriptの記法が良く分からなかったのですが
よく見たら引数の型をはっきり書いてるんですね
これは、率直にいってJavaScriptより良さそうです
実際IntelliSenseがTypeScriptベースで、素のJavaScriptの情報を提供していないのは
それがJavaScriptよりもいいものだ、という確信があるからでしょう
IntelliSenseが何を書いているか分かる程度には
TypeScriptを勉強するのが一番いいと思いました
もしかして生JavaScriptは終わりつつある言語なのでは?
>>357
検索で済んだら質問スレいらないんですよ ここは君のふと思いついた疑問を垂れ流すスレじゃないから
本当に困った人ができるだけ検索するなり自己解決しようとしても分からなかったことを聞くスレだからね
自分で助かろうとする人を救うスレだから、勘違いしないように Haxe でも、FlashDevelop がデフォルトエディタだけど、
VS Code 用のプラグインもある
検索すれば? Haxeっていう言語は知らなかったのですが
>Adobe Flashおよび独自のNekoVMで実行可能なバイトコードにコンパイルされるほか、
>JavaScript、ActionScript、C++、C#、Java、PHP、Python、Luaへの
>ソースコードの変換が可能
すごくトリッキーな、面白い言語ですね
全然性質の違うJavaScriptにもCにも変換するというのがすごい Haxeについてのネット上の記事を読んでみましたが
AltJSとしてはやはり無理があるようですね
言語をコンバートできたとしても
APIの部分でのすりあわせがあるので。
開発者がゲームを作っている人らしく、
そういう人じゃないとまず作らないような、野生感満点のプロダクトですね 世の中には同じ疑問を持っているやつが沢山いて、そいつら向けの解説記事も沢山ある
検索してそう言う記事や文献がないと言う事は、その問題が解決されていないと言う事だ
検索で済めば質問スレは不要とか言ってるバカは検索能力が欠如していて、文献を読む能力も皆無なのだろう
googleがあれば質問スレなんか不要
と言う事で、次スレは立てないように >>358みたいな馬鹿は死ねでいいだろ
ただ、こういう馬鹿も一定数居るところを見ると、
有料で初心者質問チャットをすると成立するのかね?
知恵遅れのベストアンサーってこれか?と思って調べてみたが、換金は無理っぽいんだが。 毎年必ず初心者は出てくる
小学生、幼稚園児、乳児、いつからプログラミングを始めても必ず初心者の状態はある
だから初心者というのはいなくならない いやそういう意味じゃねえよ
検索しない馬鹿は死ね、だろ
つかこのスレ相変わらず日本語が通じねえな >>363
質問スレが気に入らないなら見に来なければいいだけですが?
幼稚な人が多いですね 次スレの代わりに
バカに検索キーワードを教えてあげるスレ >>368
ローカルルールさえ守れないゴミクズをゴミクズと呼ぶ事は法律でも憲法でも禁止されていないと
ゴミクズは消えろ ローカルルールを守らないスレ荒らしに回答する事は荒らしに加担する事なので慎むように クライアントJavaScriptでは
function test(){
console.log('function called');
}
var fnName = "test";
window[fnName]();
みたいな形で変数に関数名を入れて呼ぶことが出来ますが
node.jsでは出来ないのでしょうか?
そのスコープをオブジェクト化ものがあればいいのですが。 >>370
ここは質問スレです
質問するか回答するか消えるかして下さい
分かりましたね? プライドが高く自己アピールが激しい馬鹿はホント救いようがない >>372の件ですが
function test(){
console.log('function called');
}
var fnName = "test";
eval(fnName+'()');
で出来ました
evalは使うべきでないものという先入観があってすっかり忘れていましたが、
本当に使うべきではないのかをよく検討すべきですよね?
外からやってきたダーティーな値を引数にする場合や
パフォーマンスがよほどシビアな場合以外は
特に使っても問題ないと思います
どうなのでしょうか? eval とか、グローバル変数などは、仕事では使えない
ほとんどの本や、プロジェクトで禁止されている Nodeでは最上位オブジェクト名はglobalまたはrootまたはGLOBALだけど
function test(){}
で定義してもglobal.testにマッピングされないようなので、
global['test']()でも呼び出せないですね。
var a = {};
a.test = function(){};
a['test']();
程度にとどめておくのがいいかと。 ご回答ありがとうございます
>>378
JavaScriptにはスコープのオブジェクトみたいなものがない、
ということが問題なので、グローバルかどうかはあんまり関係ないですよね
関数の中に入れても、
グローバルスコープと違う呼び出し方ができるわけではないので
>>379
たしかに関数を入れるコンテナオブジェクトを用意した方が
コードがすっきりするし、いいですね
関数を配列に入れると可読性が下がるので抵抗があったのですが
オブジェクトに入れればいいんだなって気づきました
ありがとうございました VSCodeってGit連携もイケてますし、
JavaScript/TypeScript用のプレイグラウンドの拡張機能もありますし
node.jsとの相性最高なのでは?
いまいちイモい感じだったMSが、こんなモダンなエディタを無料で提供するなんて
いい時代ですね
>>381
何故そう思ったんですか?
不思議な発想ですね >>373
質問スレでは質問と回答以外は禁止とでも言うのか?
それは法律でも憲法でも無いよな
ゴミクズは消えろ >>376-377
バカでも答えられるバカな質問なので、つい答えたくなるが
荒らしには構うな Nodeとか関係なくグローバルオブジェクト=グローバルスコープがJSの仕様何だから>>379は間違いだけどな youtubeのapiとかgoogleのとか使いたいときって
NODE。JSというのをインストールすればいいんですか?
NODE.JSというのはサバ―サイドらしいんですけど
サバ―じゃなくてもいいんですか? >>384
どうみてもあなたこそが荒らしです
分かりますね? >>387
どうみてもあなたこそが荒らしです
分かりますね? 荒らしは質問スレなら問答無用に質問者に偉そうにできると勘違いしているゴミなので
質問者と回答者で協力し、技術圧で追い出しましょう
ひたすら技術的な話だけしていれば自然と消えて行きます >>380
スコープのどこに書くかで動作が若干違います
グローバルスコープで定義するとwindowにマッピングされます
function test1(){}
window.test1(); //呼び出し可能
しかし、関数内で定義した場合はwindowにマッピングされません
(function(){
function test2(){}
window.test2(); // 未定義エラー
})()
>>380の書き方からすると、この違いについて理解されていると思いますが、
スコープの最上位オブジェクトは存在しません(スクリプトからアクセスできない)ので、何かにマッピングされるということはありません
後者の状況でwindowから呼び出したい場合は
window.test2 = function(){};
(Nodeでは global.test2 = function(){}; )
という形で定義する必要があります
が、windowやglobaのプロパティ・メソッドとして定義することは
グローバル変数と同じ扱いなので、あまりお勧めしません 普通、各オブジェクトを1つずつ、グローバル変数にはしない。
そうすると、グローバル変数の数が多すぎる
モジュール(1つのファイル)全体で、1つのグローバル変数にする 韓国人とゆとりは殺せ
この意味が理解されないうちはこのスレが機能することもないだろうさ
>>389
おまえが荒らしだよ くっそ初心者の質問で悪いんですが、
指南してもらえると嬉しいです。
下記のコードで同じ画像を4つ横に並べようと思ってるんですが、並びません。
なんとなく理由は思い浮かぶんですが、
(getElementByIdで渡されたのは値ではなく、参照的扱い?)
どう書けばかっこよく書けるのか分かりません。
かっこいいJavaScripterになりたいので厳しめに教えてください。
<img id="gazou" src="image/gazou.png" width="200" height="200">
var dispGazou= function(){
for(var i = 0; i < 4; i++){
var k = document.getElementById("gazou");
k.style.marginLeft = (parseFloat(k.width) * i) + "px";
dA.appendChild(k);
}
} >dA.appendChild(k);
dA という変数が存在しない
スタイルの設定など、DOM 操作なら、jQuery が簡単
それと、質問はこのスレよりも、web制作管理板のJS スレで聞いた方が良い。
向こうの板の方が、人が多いから >>393
たいした工夫もなく書くとするとこんな感じかな。
これはjQueryを使ったやりかた
https://jsfiddle.net/8cLk4adb/
<img id="gazou" src="https://placehold.jp/12/c42d3f/ffffff/50x50.png">
<div id="result"></div>
for (let i = 0; i < 4; i++) {
$("#gazou").clone().removeAttr('id').appendTo("#result");
}
要は要素の複製をしてないのが悪いということ あ、説明忘れてた。removeAttrしてるのは、
同じIDを複数作ることは許されてないから >>394
すみません。下記が抜けていました。
dA = document.getElementById("dispArea");
<div id="disprArea"></div>
>>396
要素の複製は知りませんでした。
無事解決しました。
ありがとうございます。
レスして頂いたお二方、ありがとうございました。 httpモジュールやrouterモジュールを使って
node.jsでちょっとしたサーバを作っています
routerはexpressの一部を切り出したモジュールで、
express同様、
router.use(bodyParser.json());
みたいな感じにミドルウェアを登録します
リクエストボディ関連で良く分からない挙動が出ているので、
bodyParserで処理する前のリクエストボディを確認したいのですが、
どうやればいいのでしょうか? httpのrequestハンドラの中にブレークポイントを設定して
requestオブジェクトを見てみても、それらしいものがないものが見当たりません
socketとかconnectionを持っているので、
これを使ってストリームを読んだりするのでしょうか? >>402の件ですが
http://m12i.hatenablog.com/entry/2016/11/19/180937
ここを読んで分かったのですが、
requestオブジェクト自体がReadableストリームでした
なのでdataハンドラとendハンドラを使ってデータを読み込める
それがリクエストボディ、ということなんですね >>404
クライアントサイドJavaScript=ブラウザの上で動くJavaScript
サーバサイドJavaScript=OSの上で動くJavaScript
という意味です
Windowsやmacのような一般的なパソコンがあるなら、node.jsも使えますよ 俺も中学でJS知ったときはこんな感じで下手くそな自演して悦に入ってたわ
自尊心は高くアピールしたいけど臆病なんだよな、分かるよ >>407
じゃあ、あなたはその頃と全く成長してないですね
恥を知りなさい node.js界ではrequestにreq、responseにres
という変数名を当てていることが多いようですが
自動補完が発達した今では、
セコい省略をするよりも分かりやすい変数名を付ける方を優先すべき、
と思っていたのでモヤモヤします
reqやresを使う合理的な理由はあるのでしょうか? >>409
ようするに可読性が十分であるかが問題の焦点だよ
長過ぎる名前っていうのも実は場合によっては読みにくい
ローカル変数のような使い捨て変数に長過ぎる名前をつけるなんてありえないから
まず短い名前が許されるのは、その変数のスコープが小さい場合
俺のルールでは一文字の変数に略して良いのは、その変数が一行のスコープしか存在しない場合だな
例えば requests.map(r => foo(r)) みたいな感じな。
なぜ一文字でいいかというと、それはその一行を見るだけでrが何を意味するのかわかるからだ。
reqやresは関数やブロックの中でだけ使われる変数ならOKだ。
大体予想がつき、それを確定するにはその前後数行を読めばいいだけ
だから関数やブロックと言っても短い行数(どんなに長くても30行程度)である必要がある
だけど普通はその程度で書く。書かなければいけないレベル。だから短くても許される
省略してはいけないのは、略称を見ても予想がつかないもの。
この時予想がつくかどうかは、その人のバックグラウンドできまるわけだが
少なくともプログラミングをしているのだからソフトウェア用語は略しても
(スコープが小さいことが前提だが)予想がつく
あとはその業務で誰もがそう略しているといえるようなものだけだなそうでないものは略してはいけない
> 自動補完が発達した今では、
自動補完は「書く時」にサポートしてくれるものであって「読む時」にサポートしてくれるものじゃない。
ぶっちゃけ書く時間というのは無視できる。読むときのほうが何度も読むし時間がかかる
その時コードが読めればそれで十分なんだよ。だから予想がつく略であればOK
そのためにも数十行程度のスコープであることが前提
名前を省略するなっていうのは、とても大きなスコープの場合の話
技術力が高い人ほど、関数の行数は短くなり、わかりやすくなり、略した変数を使う権利が与えられるw
手段と目的を履き違えたらダメだよ。略がいけないのは読んだ人がわかりにくいからで
別にわかりにくくないのであれば、略してOK >>410
長々と乙だが、お前らゆとりの問題はそこなんだよ。
お前らがそんなレスをしている限り、お前らが居るスレが良スレになることはない。
誰を助けるべきか、よく考えろ。
パヨクがグダグダよく言っているが、あれは単なる論点のすり替えだ。騙されてはいけない。
韓国人やパヨクが嫌われているのは、迷惑行為をしているからでしかない。差別ではなく、区別だ。
お前はこのnode女を飼うつもりなのか?それでスレが良くなるとでも思っているのか?
お花畑すぎるのも、周りの人には大迷惑だということに気づけ。
ここら辺に関してゆとりは全く傍若無人だから嫌われるし、
俺は「ゆとりも殺さないといけない」と結論づけてる。
もっとも、被害を被るのは結局お前らであり、
また、自覚してないようだが、既にそうなっているんだがな。 >>410
ありがとうございます
resとかreqが使われるのは、コールバックの仮引数です
ローカル変数なので
あえて省略して刹那感を出しているのかもしれませんね
node.jsはモジュールを読み込む変数に一般名詞を使うことが多いので
一般名詞を使うとモジュールっぽく見えてしまう、ということもありそうです
>>411
何を言っているんですか??
馬鹿な人はだいたいネトウヨですね
しかしJavaScriptスレにまでネトウヨが湧くとは・・(呆れ >>411
いつも通りお前JavaScriptの話をしてないな >>410
そうそう、名前よりスコープを短く保つの大事 スコープは短く。それができたなら変数名を短くする権利が与えられる
が正解な ゴミクズの質問は
1 ゴミクズ以外の誰でも検索すれば一発でわかる
2 正答が存在しないことがわかりきっている
1はローカルルールにやめろとかいてあるし
2はこんな場末の掲示板でやっても見せ合いオナニーにしかならん
本当にゴミクズ >>412-413
まあお前らが居る限り、
俺がどんだけ努力しても(俺流のやり方では)スレが正常化しないと分かってしまったからね。
俺は田んぼに肥料をやってたくさん米をならすことは出来るが、
それが全部お前らイナゴのエサになってしまうだけだと分かったら、
先にイナゴを殺すしかないだろ。だから、俺は
韓国人死ね
ゆとり死ね
な訳だ。ただし俺が老害化していて、俺の考えが間違っている可能性
(ゆとり流の別解法が存在する可能性)も勿論残っているから、俺はとりあえず傍観モードな訳だ。
お前らの回答には間違いも散見されるが、それについて指摘するつもりもない。
お前らのやり方で正常化するようなら、お前らの勝ちでいいし、俺ら老害は去るべきではある。
ただ本来は、お前らがルールだというのなら、お前らが新たに立てた別スレでやるのが筋であって、
旧来のスレを乗っ取ってやっているお前らにはどだい無理だというのも自明なんだが。
(お前らはお前らだけで人を集めるだけの魅力/能力がない、と自己証明している。
本当に良いスレが出来れば自然と人はそっちに流れるものでしかないんだが)
他言語スレ見て見ろ。JavaScriptのスレが如何に酷いかはよく分かる。
そして、2chのスレはどこでも同じような雰囲気だ。
それは「そういう物しかできないから」であり、また、「そうじゃないと持続しない」からなんだよ。
2chはずっとシステムを変えてない。
その中でお前らみたいに色々努力する奴も必ずいるし、俺も俺なりに抗ってみた時期もある。
でも結局、落ち着いているところに落ち着いている、というのが今の2chだ。
それ以上の物を作るのは相当に難しい。
今なぜこうなっているのかすら理解できないお前らみたいな馬鹿にはこれを凌駕するのは到底無理なわけだが、
まあそれでもお手並み拝見はするべき、だから傍観してる。
>>417の言うことは全く正解だ。
なぜ検索しないのかは俺にもさっぱり分からない。つか、検索した方が早いだろ。 >>412
要は、ある程度普及した略語は略語として扱おう、ぐらいに思っといたら良いと思うよ。
iって変数はだいたいループカウンタだなあ、ぐらい。 ふと思ったんですが、非同期関数の中から投げられた例外ってどうなるんでしょうか?
処理がtryブロックをとっくに抜けたタイミングで
コールバック関数の中から投げられた例外って、catchできないですよね・・? try {
setTimeout(()=>{
throw '!';
},1000);
}catch(e){
console.log('cought:'+e);
}
console.log('tryの外');
とやったら、やはりcatch出来ませんでした
catchする方法はないのでしょうか?
そもそも例外と非同期処理の間に相容れないものがある気がします
処理が失敗した時、
その失敗にどう対応するかは後で考えようという場合に、とりあえず例外を投げるようにしておく、
という方針がありますが
それが使えないということですよね? >>421
setTimeoutはどのオブジェクトに生えてるメソッドだと思う?
そうwindow。いつもは省略しているがwindow.setTimeoutが
正式なメソッド名
だからwindow自身にエラーをキャッチする方法がある
それが何かは俺の次のやつに書かせようw あと非同期処理にはpromiseを使う
promiseにはcatchする方法がある >>420-421
オライリーの「初めてのJavaScript 第3版」に書いてあるけど、
例外処理は、コールバック関数の内外とか、
コンテキストが異なるものには、対応できない
co, Koa のジェネレータ・ランナーを使えば、
例外処理を、同期的に書ける >>421
throwする代わりにreject()すれば取り合えずcatch出来る
https://jsfiddle.net/bvL9qwmn/ >>428
え? 何に対して理由を書いてほしいの?
書くけど? >>429
彼(>>424)がレスした相手を確認してみたら¿ >>430
確認してもわからないから、どれに対する理由がほしいのかって聞いてるんだが?
言えないなら、それまでってことでいいよ つまり、
韓国人死ね
だろ。つかマジで、最低限の会話が成立しないと無理だろ。 ご回答ありがとうございます
知らない言葉も出てきて、すぐには消化できないのでゆっくり見ていきます
ありがとうございました とりあえず、初めてのJavaScriptをぽちりました
「Brendan Eichはコンピュータサイエンスに関するしっかりとした知識をもっており、
とても洗練されたアイデアをJavaScriptに注ぎ込みました。
多くの点で時代の最先端を行くもので、
大多数の開発者がその素晴らしさに気づくには15年もの時間がかかりました。」
これは本当にそう思いますねぇ >>431
自分で何を書いたか分からないようじゃ
それまでってことでいいよ >>436
だから何も指摘されるようなことは書いてないって
それなのに指摘すると言うんだから、お前にはそれがどれかを
言う義務がある >>424の人は、文字通りの単なる荒らしだと思いますよ
JavaScriptにすらたいして興味ないんじゃないですか?
全くなければJavaScriptスレを覗きもしないので、少しは興味があるでしょうが >>436
分かるとは思うが、そいつは煽り抜きでガチのアスペだぞ。マジでこんな感じ。
> 心理学的に言えば、部分部分でサポートがないと、
> 細かい点は認知していないと言うことが明白ですね。
> http://fanblogs.jp/hasuraa/archive/261/0
こんなところで油売ってるのではなく、病院に行った方がいいと思うんだが。 👀
Rock54: Caution(BBR-MD5:842eac59f97f47c0d6fb1bed016df49c) 正しいことをしている人に「間違ってる!」とだけ言い放って
どこが?と聞いたら「自分で考えろ!」と言って
討論(?)に勝った気になってるんですよw マジレスすると、
>>416 で「が正解な」と言うのは理由なく「間違ってる!」と言っているのと同じでそこが突っ込まれてるんだと思うぞ
もしかすると書いた本人はその気がないのかも知れないが、そう受け取られてしまう書き方だというのを自覚した方がいいよ >>443
マジレスすると、
ガチアスペ ID:ML6lMJWk
Node糞女荒らし ID:rMheBEyi
以外は全員それ分かってるけどな。
現実として、このレベルで無駄に諍いが起きるほど日本語が不自由なやつは死ねでしかないだろ。
そして当人たちは君や俺が今何言ってるかも理解できないんだぜ。
だって俺のこの書き込みは事の発端のやり取りより難しいわけでさ。マジでどうしようもない。
韓国人死ね マジで
ただなあ、さすがにこのレベルのやり取りは、2chでもなかなかないんだがなあ。
JavaScriptだけ異常に馬鹿揃いなのは本当に不思議なんだが。 今Javascript勉強中の初心者です。、
HTML、cssもある程度読み書きいけるようになってきたのですが、
jQueryに手を出そうと考えています。
そこで質問なのですが、
実際の業務では、jQueryは使われるものなのでしょうか?
それとも実際の業務ではJavascriptはバニラのような状態で使用されるものなのでしょうか?
業務経験者の方がいらっしゃったら教えていただけたらと思います。 普通に使われるよ
常時使われるかと言うと勿論要件に依る >>446
ありがとうございます。
jQueryも使えるように取り組みます。
業務がVB.NET()なので、
Javascript楽しくて仕方ないです。
転職できるように頑張ろうと思います。 「初めてのJavaScript」を読んでいますが
配列を
['a',
'b',
'c',]
みたいに末尾要素の後ろにコンマを書く書き方って、今では許容されているのですね
これはPHPでは出来るのにJavaScriptでは出来ない書き方だと思っていましたが、
JavaScriptの仕様からすると本来出来るもので、
実装が仕様に追いついてきたとのこと。
時代は進歩しているものですね? 今では関数定義や呼び出しの引数でも末尾カンマ使えるよ
っていうか配列の末尾カンマ問題はただ古いIEがJScript実装だったってことで
IE9以降はオブジェクトも含めて問題ないでしょ >>449
昔のJavaScriptの仕様だと許されてなくてJSONはそれに準拠している。
許されるようになったのはES5あたりじゃなかったかな。 JavaScriptは配列に限って昔から末尾のカンマを許容していた
ECMAScript 3では、末尾のカンマは許容されていなかった
ECMAScript 5.1では、配列とオブジェクトの両方で末尾のカンマは許容される
ECMAScript 2017では、関数の引数の末尾のカンマが許容されるようになった ID:eKIgo3Je = ID:rMheBEyi = ID:uhJerKM5 = ID:QIqSykkT な。
まあお前らがその程度だからこのスレもこの程度なんだが。 ID:/arVeZ+Z = ID:ML6lMJWk = ID:iA9W3nMK >>455
最後は違うで?
あと別に隠しとらんで? javascriptで普通のアプリケーションを作るにはNode.jsで
作ればいいですか? 普通のアプリケーションとは
プログラムをテキストファイルにかいて
インタープリターに送ると
アプリケーションが始まるものです。 Nodeはどちらかと言うとバッチのイメージ
OS上で動く普通のアプリをJSで書きたいのならWinストアアプリとかの方向なんじゃないかな
もしくはWeb技術使いたいのならElectronとかから、単純なWebアプリまで沢山選択肢はある クロージャというのは、
周囲のスコープを保持している関数のことでも、
関数を「包み込んでいる」スコープのことでもなく、
スコープと関数をまるごと包み込んでいる目に見えない何かのことなのでしょうか?
今までは、周囲のスコープを保持している関数のことを、
スコープを閉じ込めたもの=クロージャ、だと思っていましたが
「初めてのJavaScript」を読むとどうも違うようです 関数=コードとして目に見える
スコープ=ブロックや関数という形で目に見える
クロージャ=目に見えない抽象的な概念
という感じでしょうか?
これはなかなか理解しにくいですよね
「初めてのJavaScript」は、とてもいい本、
おそらくJavaScript本の中で最良の部類の本ですが、
書名から連想するような初心者向けの本では全くないですね! あいかわらず、検索すらしないゴミクズ
スレ荒らしには構わないように 本来一回限りで消えてしまう関数スコープを
無名関数にそれへの参照を保持させることですぐには消えないものにする
という一種のテクニックです
技術的にはそんなに難解ではないのですが、
用語法が分かりにくいんですよね
クロージャって何のこと指して言ってるの?っていう。
>>465
ハーゲ >>467
荒らし死ね
韓国人死ね
てかマジググレカス var outFunc = function(){
var count = 0;
return function(){ return ++count; };
}();
console.log(outFunc()); // 1
console.log(outFunc()); // 2
クロージャは静的スコープ。簡易クラス
内側の関数から見て、スコープ外のcount を使っている。
一見、スコープの外側の環境を閉じ込めているように見えるが、
実際にはその変数をコピーしておらず、ただ参照しているだけなので要注意!
内側の関数を戻した、外側のoutFunc をクラスと見れば、
count がメンバー変数(プロパティ)で、内側の関数がメソッドになる。
メソッドでメンバー変数を更新すれば、更新後のメンバー変数が保持されるのは当たり前 初めてのJavaScript 第3版、オライリー、2017
これを読むには、数年以上の勉強が必要。
ES6(2015) の本だから、Babel で、ES5 に変換して実行する。
初心者は、ES3, ES5, ES6 の順番に勉強する方が良い
特に、ES6ではクラス構文もできて、
オブジェクト指向に近くなったから、難易度が急上昇した
漏れは、10言語は知っているけど、この本に苦戦中 >>466
>>469
荒らしに反応することもスレ荒らし
そんな事もわからないボケにふさわしく、理解不足なレスを返しているところは笑えるが
ここはネタスレじゃ無いので引っ込んでろ >>467
> ですから自分がまず質問スレですることは、あなたのような連中を追い出すことです
ハーゲとレスする事でした 大爆笑 >>467
ハーゲ
これで追い出せるのかな 大爆笑 >>469
ありがとうございます
たしかにふるまいはクラスに似ていますね
静的スコープというのはレキシカルスコープというやつですね
たまに本の中で見かけるけど、良く分からず、分からないままにしていた言葉です
いま検索したところ、「JavaScript Good Parts」の中に
「JavaScriptの関数は、(大部分は)レキシカルなスコープを持つファーストクラスオブジェクトである」
と言及がありました。しかしその後、「レキシカルなスコープ」については説明がない
こんな風に、ただ出てくるだけの言葉、という印象があり、
今まで流していたのですが、これを機に勉強したいと思います
ありがとうございました >>474の件ですが
レキシカルスコープを分からなかったというより
ダイナミックスコープを知らなかっただけでした
ダイナミックスコープはコードの実行時にコールスタックを辿って変数を決める方式で
関数の中でローカルとして宣言されていない変数を見つけると、
処理系はコールスタックを辿り、呼び出し元のスコープの中で変数を探す
それを変数が見つかるか、グローバルスコープに突き当たるまで繰り返す
そういうものが
ダイナミックスコープだというのですが、
そんなの見たことがありません
それもそのはずで、
現代のプログラミング言語のほとんどがレキシカルスコープを採用しているとのこと。
そしてレキシカルスコープはダイナミックではないスコープ、
つまり現代のほとんどのプログラマーが「スコープとはこういうものだ」
と考えているスコープです
つまり構文の包含関係によって変数が決められる方式です
構文の包含関係に基づくので、変数が解決されるのは構文解析時です
そんなわけで普段プログラムを書いていて、
レキシカルスコープとダイナミックスコープの違いを意識することはあまりなさそうですが
処理系の内部動作にまで視点を広げた時には、
興味深いトピックとして立ち上がってきそうですね >>474-475,469
まずは、ローカルルールなんか守らなくて良いとほざいてるゴミクズとそれにレスするカスを追い出そう
ハーゲ ダイナミックスコープというとLispでしか見たことねぇ ググれないブス >>475
朴訥おじさん >>470
ガチアスペ >>431
の3人で別スレ立てて、好きなようにやってみろ。
俺はそっちには行かないし、そこが繁盛するならそれでいいし。
お前らが駄目なのは、良い物をより良い物が倒す実力主義ではなく、
良い国に悪い韓国人がたかる背乗り主義だからなんだよ。
だから少しマシになってもすぐお前らによって潰されてしまう。
しかもお前らはそれを未だに自覚できてない。学習能力0だなマジで。
韓国人死ね
脱線するが、経団連もこの辺完全にお花畑老害になっている。
自分達の国を自分達で改善できないゴキブリ韓国人なんて呼んだ所で、
この国が良くなる筈もない。悪くなるに決まっている。
だから移民なんてそんなに簡単じゃない。
お前らがスレを上手く運営できると思っているのなら、
実際にお前らで別スレを立てて繁盛させ、結果的に人をそこに集め、旧来のスレを殺してみせろ。
これは実力主義であり、正しいスレの殺し方だ。
ゴキブリ韓国人流の背乗り主義はマジでやめろ。誰の為にもならない。 何か気持ち悪い人が棲息していますが昔からなんでしょうか?
質問者と回答者で力を合わせて浄化を目指しましょう >>479
死ねよブス
つか、お前は過去スレどころかこのスレすら全部読んでないのな ちなみに>>474のJavaScript Good Partsの箇所ですが
JavaScriptでJavaScriptを実装するという面白い試みを紹介している箇所だったので
その記事が載っている「ビューティフルコード」をぽちりました
少し読みましたが、これも良書のにおいがプンプンします
こういうセレンディピティが起きるのが質問スレの醍醐味ですね 静的スコープは、Ruby, Groovy では、{ }, block で作れる。
モジュール・クラスも、{ }で囲むだけで、スコープを作れる
でも、JS では、スコープの機能は、function にしたから、
スコープを作るために、functionをネストしなければならない。
モジュール・クラスのスコープを作る場合も、functionを使わなければならない
つまり、スコープと関数の概念を切り離せていない。
関数スコープだけなのは、Python と同じ
でも、Ruby, Groovy では、ネストしなくてよい
Rubyのblock(処理)を、オブジェクトとして持ち運ぶ場合は、
proc に変換して、どこでも実行できる。
つまり、第一級関数と同じ
JS みたいに、functionを使って、スコープを作るのは、ややこしいだけ >>432
あー、うん。数年前の知識だね。
今じゃ当てはまらないから、そのレスは無視するね
ゴミ、捨てるね JavaScriptの場合は
let func = () => console.log("ok");
func()
みたいにして実行できるけど、
Rubyだと、
func.call() みたいにしないといけないのがダサいんだよな
callってなんだよwww http://hamuhamu.hatenablog.jp/entry/2015/05/01/050530
> Rubyのメソッドは、変数への代入が出来ないので、第一級オブジェクトではない。
> 第一級オブジェクトではないから変数への代入が出来ないといったほうが正しいのかも。
>
> Rubyのメソッドをクロージャとして扱うには Proc や lambda を使います。
> 厳密に言うと Rubyにおいて Proc や lambda を扱ったものは、第一級オブジェクトではないらしい。 まあ漏れが言いたかったのは、JS のfunction を使う場合、
別に関数として呼び出すわけじゃない
多くの場合、スコープが欲しいだけだから、{ } で十分。
一々、function を使わされるのが、誤解を招く
言語に、関数スコープしか無いから >>486
何度も言わせるな。
JavaScriptは {} でスコープを作れる
調べもせずに反論するな まあ何でもかんでも{}で足りるというわけでもない
その点での即時関数の代わりにGoogleが推してるdo文は実際欲しい
O.oの二の舞いにならなければよいが 純粋関数を
1.同じ入力に対しては同じ出力を返す。
2.「副作用」をもたない。つまりプログラムの状態を変えない。
と「初めてのJavaScript」は説明します
そして関数外部にあった変数をクロージャに含んで、
スタティック変数のように使うようにしたことを、「副作用がなくなった」と言います
スタティック変数的な変数であっても
「プログラムの状態」には変わりがないのでは?
とも思うのですが、ここでいう「プログラムの状態」というのは、
関数の外の変数、という意味なのでしょうか?
またオブジェクトのメンバを変更するオブジェクトメソッドは
副作用があるのでしょうか?ないのでしょうか? またgoogle一発で回答に辿りつける質問をしてやがる
相当に知能が低いんだろうな
荒らすな ハーゲ >>490
またハゲた発想ですね〜
ツルッパゲです
ググったんですか?見つかったんですか?
それならそれをここに書けばいいのです
ググって見つかってはい終わりじゃないんですよ
情報は検討しなければならないのです
ネットに書かれてあればそれが事実だ、真実だ、とはならないんです
そのために質問スレがあるのです
分かりますね? >>489
定義は難しいというか、本来プログラミング言語のものではないので無理がある
例えば同じ引数を与えると必ず同じ値を返す関数と言ってもいいが、
内部的にMathを利用していて、それが書き換えられた場合まで突かれると厳しい
まあそこまで厳密ではなくて良いとすれば、反対にMathのような関数外の変数を書き換える
関数と言っても良いが、これでもループを形成すれば副作用的なものは作れる(モナド)
結局純粋関数かどうかなんて実用的なプログラミング言語には関係ない話で考えなくても良い
それよりかは、「外部変数を書き換えないようにする」とかもっと具体的な部分に注目したほうが良い >>491
普通に検索すれば一発でたどり着くしわかりきっている事なので普通のスレ住民には問題無い
ローカルルールなど知らんと宣言してるスレ荒らしの無能さに起因する事情など考えてやる必要はない
消えろ ハーゲ >>489
>>491
ググレブス
ゴキブリ韓国人死ね
本当にお前の投稿が他の人の役に立つと思っているのなら、結果で示せ。
新スレを立てて、お前の投稿を繰り返し、人が集まるかどうかやってみろ。
本当に良いスレなら自然と人が集まるものだ。
これすら試す勇気もないのだから、お前はゴキブリ韓国人と同レベルだよ。 >>489
クロージャ内の変数が更新されても、副作用はある。
状態が変化した
ただ、外部には副作用がないから、内部に限定した・封じ込めたという意味 ご回答ありがとうございます
>>492
モナドと言う語をプログラミング周辺で初めて聞きましたが
関数型言語の用語なんですね
>>495
やはりそうですか
引数も変えず、外の変数も変えず、
ただ返り値だけを自由に出来るのが副作用のない関数なのでしょうね
>>493-494
あなたがたは(一人かも知れませんが)何一つ代わり映えのしない不毛な戯言を
ロボットのように延々と繰り返していますが、なんでこのスレにいるんですか? >>492
>>495
お前も迷惑だからそのブスと他スレ立てて出て行け
良い事をしているつもりならそれは完全に勘違いだ
犯罪者に対してエサをやることは反社会行為だ
ちゃんと自覚しろ
そもそもお前らがこのスレに固執する意味はないはずだ
なぜここで迷惑行為を続ける?他スレ立てれば済む話だろ
Web板にも捨てるほどスレはあるし
>>496
死ねよブス ブックマークレットに登録したMutationObserverを使って変更を検知できるようになったのですが、
ページがリロードされるとMutationObserverで登録した処理が
無効になってしまいます。どうすればいいでしょうか。 >>498
ブックマークレットは自動的に実行できないので
ページ開いた時に実行できるブラウザ拡張機能を使用する
例えば、Tampermonkey とかな
ちなみに俺はこれを使って、ページを開いたらすぐに
ダウンロードボタンを押すようにしているw Javascriptで出来てるから不安なら自分で調べれば良い 配列についての質問なのですが、
配列にプロパティを持たせたい場合、
どのように宣言すれば良いでしょうか。
下記のようなことがしたいと考えています。
var cell = new Array(3){
プロパティ1つ目 x;
プロパティ2つ目 y;
};
上記のようなことがしたい場合、
x,yの要素を持つクラスを作成し、
配列でインスタンスを作成するしかないでしょうか?
何か良い方法があれば御指南頂ければと思います。
よろしくお願いします。 あるクラスのインスタンスを、欲しい数だけ作る
それらを、配列(入れ物・コンテナ)に入れる var cell = new Array(3);
としたなら、cellはArrayのインスタンス
>x,yの要素を持つクラスを作成し、
>配列でインスタンスを作成するしかないでしょうか?
この辺の意味が分からんけど、
cell.プロパティ1つ目 = x;
cell.プロパティ2つ目 = y;
としない、またはできない理由は何? よく分からんが、
3x3の2次元配列を用意してcell[x][y]とアクセスできるCellクラスを作りたいってことか? それとも
cell[0]へのアクセサcell.x
cell[1]へのアクセサcell.y
を定義したいということだろうか 質問が悪く、すみません。
アクセスの仕方としては、
cell[0].x = 保管したい値1;
cell[0].y = 保管したい値2;
のような感じです。
オセロの作成を色々手探りでやっているのですが、
cellには画像、x座標、y座標のデータを持たせて、
画像のクリックイベントで格納しておいたx座標y座標を使いたいと考えています。
cellのインデックスには空、白、黒の3つを割り当てたいと考えています。
長々とすみません。 {x,y}の配列が作りたいって事ね
一時はTypedObjectとかあったけど、
まあそれに倣わなくても地道にループで初期化するので良いと思うけどね
どうしても最大限抽象化したいのならProxyArray案もあるけど >cellのインデックスには空、白、黒の3つを割り当てたいと考えています。
これがよくわからん cell[0] = {};
cell[0].x = 保管したい値1;
cell[0].y = 保管したい値2;
cell[0]はObjectクラスのインスタンスとも言えるけど、そこまで深く考えなくてもいいと思う 日本語が不自由ですみません...
やりたかったのは>>510さんのようなことでした。
これで作ってみようと思います。
ありがとうございました。 おいおい、ここまで話を進めたのはいいけど、
最初の初期化であれば普通はこう書くだろ?
var cell = [{x: 値1, y:値2}]; 配列なら複数形のほうがいいかもな
var cells = [{x: 値1, y:値2}]; 普通に、マス目のクラスを作って、メソッドも加える
そのインスタンスを、64個作って、配列に入れておく 他のゲームならコマのオブジェクトを作るほうがいいかもしれんけど
オセロなら8x8のマスのオブジェクトに空・白・黒の状態持たせたほうがいいよねぇ すみません、もしこのスレで
axiosを使っている人がいましたら
伺いたいのですが
activexobject(microsoft.xmlhttp)を呼び出す方法と
もしそれがなければ改造方法の指南を受けたいです。
よろしくお願いします。 なんでaxios?
new ActiveXObject()じゃいかんのか? すみません、
Vueのコンポーネント作成で使いたいと思いました。
昔のIEでローカル配置データの読み込みができたらと考えていました。 ローカルファイルとか、OS のネイティブAPI を使うのなら、Electron。
Electron から、Angular, React, Vue を使う
Electronではじめるアプリ開発
~JavaScript/HTML/CSSでデスクトップアプリを作ろう
野口 将人・倉見 洋輔、2017 分かりにくくて申し訳ないです。
<body onload=“function a();”>
function a(){
sum = new Sum()
}
function Sum(){
...........略
}
3つのカタマリ は別ファイルなのですが、実行するとUncaught ReferenceError:Sum is not difinedと出てしまいます。
不備が分かる方、問題点を教えていただけるととても助かります。
上から順にHTML. script.js script-2jsで
javascriptはscriptタグを2つ並べて参照しました。
<script>〜</script>
<script>〜</script> script.jsとscript-2jsの読む順番をひっくり返せ >>522
順序を入れ替えましたが、ダメでした....... まともに質問できないゴミクズ質問者に見当違いの答えを返すアホ回答者
ゴミクズ質問者のせいで終わったスレ
原因は確実に9文字のアレだな >>524
その9文字を教えていただけると助かります 3つのファイルは同じ場所にあるの?
後aとSumはもういいからhtmlを省略せずに示してくれると分かりやすい ><body onload=“function a();”>
全角文字を使うな。
半角ダブルクォーテーションにする
<body onload="function a();"> >>527
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>gaming</title>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
<script src="script-2.js"></script>
<script src="script-3.js"></script>
<script src="script-4.js"></script>
<body onload="initial()">
<h1>javascript game!</h1>
<p>click here to start game</p>
<canvas id="canvas" style="background-color:#eef;" width="800" height="400" onclick="start();">
<audio id="item_get" preload="auto">
<source src="item _get.mp3" type="audio/mp3"></audio>
</body></html>
コピペする時点で、変な処理が加わった可能性もあるのですが、構造はこのようです。 >>529
>>521のa();に当たる部分がinitial();でinitial();に含まれる処理→Sumがdefinedになってしまいます。
どうぞよろしくお願いします >>529
何度も連投で申し訳ないのですが、initial()が含まれるのがscript-4
Sum();が含まれるのがscript-3です >>531
めんどくせーから、やり方教えるから自分でやれ
まずひとつのファイルに書いて動くかどうか確認しろ
動かなかったら動くと思うところまで削って確認しろ
動いたら、ファイルを分けるなどして動かなくなる
ところまで戻していけ
そうすりゃどこに原因が有るかわかる >>532
そうですね、自分でいろいろいじってやってみます! そんなにファイルを分けているなら、CommonJS でも使えば?
Node.js, Electron, Webpack, Babel, jQuery とか オブザーバーの利点が今ひとつ解らない。
カスタムイベント用意して
個別にそのイベントリスナー登録すればすむのに
管理オブジェクトがオブザーバーリスト持ったり
専用の関数を継承したり等
何故態々面倒な事をするのだろうか。 Mediator
中央管制塔のように全体を統轄する
「Observer Mediator」で検索!
自分でやったら、イベントの削除とかが面倒くさい。
削除しなかったら、ずっとメモリを使い続ける(メモリリーク)
イベントを取り付けた要素の、先祖の要素が削除された場合に、
イベントを削除する機会を失うから、メモリリークになる
jQuery では、そういう場合でも、メモリリークにならないから、すごい! もう随分前からNative-JS間の循環参照の問題は解決して
参照が残ってなければ消えるけどな
ネイティブの実装も極めて特定の場合に参照が残っている場合でも消えてしまうんだが
jQueryはそれをより気にせずアグレッシブに消すというだけで良し悪しがある Backbone.js ではメモリリークになるけど、
jQuery ではならない、って聞いた node.jsでのファイルの存在確認には
fsモジュールのaccessメソッドが使われますが、
ファイルがないと例外が投げられます(同期の場合)
この挙動おかしくないですか?
ファイルがあるならtrue、ないならfalseを返せばいいはずです
例外は何かしら例外的な事象を知らせるために投げられるものですが
ファイルの有無を調べるメソッドにおいて、
ファイルがないことは例外的事象でも何でもありません
何でこんなことになってるのでしょうか? 下記のコードについて質問です。
配列内容をシャッフルするコードのようなのですが、
forの動作に疑問を持ったので教えて頂ければと思います。
・,(カンマ)で区切ってある箇所は連続して処理されるという認識で間違いないでしょうか?
・for文が止まる理由は、for文の真ん中の条件式の k; が0になる=false と判断されるということでしょうか?
Array.prototype.shuffle = function() {
for(var j, x, k = this.length; k; j = Math.floor(Math.random() * k), x = this[--k], this[k] = this[j], this[j] = x);
return this;
};
質問が分かりづらかったらすみません。
よろしくお願いします。 >>540
意味がわからないのは、そのコードの可読性が低いから、
だめだよ。そんな書き方をしたら
普通に書こう。前提として for(ここ; ここ; ここ) の「ここ」の部分は省略できる
まず、一番目の「ここ」は初期化なのだから forの外に移動できる
Array.prototype.shuffle = function() {
var j, x, k = this.length;
for(; k; j = Math.floor(Math.random() * k), x = this[--k], this[k] = this[j], this[j] = x);
return this;
};
そして、3番目の「ここ」はループの中に入れることができる
Array.prototype.shuffle = function() {
var j, x, k = this.length;
for(; k;) {
j = Math.floor(Math.random() * k), x = this[--k], this[k] = this[j], this[j] = x
}
return this;
}; あとは整形しよう
Array.prototype.shuffle = function() {
var j, x, k = this.length;
for(; k;) {
j = Math.floor(Math.random() * k);
x = this[--k];
this[k] = this[j];
this[j] = x;
}
return this;
};
そしてforではなくwhile使ったりと普通の書き方に書き直す
Array.prototype.shuffle = function() {
var k = this.length;
while(k) {
var j = Math.floor(Math.random() * k);
k--;
var x = this[k];
this[k] = this[j];
this[j] = x;
}
return this;
}; ES6使った最新の書き方だとこうなるかな
Array.prototype.shuffle = function() {
for (let i = this.length; i > 0; i--) {
const a = i - 1;
const b = Math.floor(Math.random() * i);
[this[a], this[b]] = [this[b], this[a]];
}
return this;
};
console.log([0,1,2,3,4,5,6,7,8,9].shuffle());
そしてlodashにはshuffle関数は用意されてるので何も作る必要はないw
https://lodash.com/docs/4.17.4#shuffle >>541-544
返信ありがとうございます。
Javascriptはライブラリが豊富なんですね。
もっと勉強してライブラリも扱えるように頑張ります。 その実装のは破壊的、lodashのは非破壊的、別もの shuffleだけのためにlodashを使うのは、徒歩30秒の距離で車を使うようなもの 別に誰もそれだけの為に導入しろと言ってる訳ではなかろう loadash使うなら別に>>540のコードの可読性なんて関係ないし
ケツつけ無くてもそのまま使えばいいよね
それともloadashの中身も読めってことかな? 今回は仕事でデバッグするわけじゃないんだから可動性は関係ない
勉強では可読性は時間をかけてほぐせばいいだけ
ただ初心者はアルゴリズムの理解力がないからどのみち他人のコードを読むのは辛いのが当たり前 youtube player api で動画を再生しているdivの画像を取得
(youtube動画のフレーム画像を取得)
する方法はありますか? >>550
アルゴリズムどころか基本的な文法で詰まってるだけじゃん 素人なりに firefox の addon を書いている最中なのですが
それに適した質問スレなどはありますか
このスレが最適でしょうか 今の拡張機能界はChromeベースのがWeb標準になって
Firefox/Edgeもそれとかなりの互換性持ってるから
ここで聞いても答えてくれやすいと思うよ
結構難しいAPIも多いしね そんな機能してないスレを紹介しても仕方がない
ExtensionはいまやW3C仕様なんだしこのスレで扱うべき
https://browserext.github.io/browserext/ イマドキのJavaScriptの書き方2018
https://qiita.com/shibukawa/items/19ab5c381bbb2e09d0d9
これの「辞書・ハッシュ用途はオブジェクトではなくてMapを使う」
っていうところですが、
オブジェクトをハッシュとして使うことのデメリットなんて実際上ないし、
Mapの書き方の方がイケてないと思うのですが、どうなのでしょうか?
特にMapオブジェクト生成時に、キーと値を配列で渡しているのが気になります
そもそもオブジェクトをハッシュとして使うというアイデアからJSONが生まれて
JSONが現在も広く使われているのに、
わざわざMapに書き換えるのってアホくさいと思います
そうですね? >>557
何を質問したいんですか?
ちゃんとまとめてから来てください
分かりますね? >>558
オブジェクトをMapに書き換えるメリットって本当にありますか? オブジェクトではキーと値の一対一の対応が明確なのに
Mapオブジェクトを使う方法ではそこここに配列が介在していて
そのあたりがぼやけています
これはハッシュ専用のオブジェクトを使うというアリバイだけのために
支払うコストとしては多すぎます
そうですね?
>>560
ハーゲ なるほど
それはオブジェクトにはないメリットですね
用途によっては適所がありそうです
ありがとうございました 本当にゴミクズ ドキュメントに書いてある事を指摘されて
「なるほど」
生きている価値がない >>562
ゴミクズは能力最底辺なので、初心者でさえ回答できる質問しか出来ない
したがって簡単に答えられるが
荒らしにエサを与えるな
わかったかね 以後注意するように >>566
相変わらすハゲですね〜
オブジェクトをハッシュとして使ってきた用法に関しては
依然としてオブジェクトの方がいいと思いますよ
ただMapにはMapの使い道がある、と言っているのです
分かりますね? >>566
荒らしにエサを与えると>>567のようにはしゃぎ出す 二度とエサを与えるな >>562
ゴミクズの見分け方は簡単
検索すれば一発でわかる事
一次ドキュメントに書かれている事をまとまりのない長文で聞く
二度とエサを与えるな >>562
ちなみにお前はどんなスレが欲しいんだ?
或いは、自分が何をやっているのか理解しているか?
君の回答よりもMDNの方が詳しく正確に書いてある。
つまりこのブスはMDNすら読んでいないことが確定的に分かっている。
その上で、回答をするのなら、今後ともMDNすら読んでいない奴が質問を繰り返すことになる。
それが君の望むスレなのか?
或いは、君はゴキブリ韓国人と同様、日本人が集まる場所を破壊するのが目的なのか?
MDNすら読め無い馬鹿が集うスレが欲しいのなら、君らがそれを新たに作るのは自由だ。
ただ、ここはそうじゃない。
最低限ググってから質問しろという、2chではごく当たり前のスレだ。
それを無理に乗っ取って回答を続けることは、背乗りゴキブリ韓国人と同レベルだと理解できてるか?
もっと長期的視点で考えろ。 var key = 'a';
// var key = '__proto__';
var obj = {};
obj[key] = obj[key] ? obj[key] + 1 : 1;
文書に出現する、単語の数を数える場合、
その単語が未登録なら1、すでに登録されているなら、1増やす
こういう場合に、たまたま、__proto__ という単語を登録しようとするとバグル。
obj.__proto__ を上書きするから
var wordsMap : Map<String, Int> = new Map();
wordsMap["a"] = 1;
trace(wordsMap["a"]);
上は、Haxe のMap のコードだが、ES4 変換後のコードでは、
wordsMap["$" + key]
のように、キーの前に、$ 文字を連結している
他にも、
var obj = {x : {}};
のように、オブジェクト内のオブジェクトを使う事もできるが、
この方法でも、__proto__ ではバグル つまり、キーとしてそういうものが入らないと
断定できるならば問題ない
キーとなるものはコードに書かれている文字のみで
ユーザーが入力したテキストを入れるとかない限り
心配する必要はないということさ Object.prototypeの問題は
obj={__proto__:null}
obj=Object.create()
で解決するから別にそこがオブジェクトリテラルと比べて
殊更取り上げる程のMapの特徴と言うわけでもない Object.create(null)もいいが、Mapの利点はforEachで定義順で列挙可能とか、iterableなオブジェクトを生成しやすいとか、あたりじゃないかね 全部一次ドキュメントに*日本語でも*記述されてる事だね
ゴミクズ質問者とそれに集るゴミクズ回答者 JSに一次ドキュメントはない
コメントほぼ無しの仕様書と二次三次ドキュメントだけ ゴミクズ回答者はWeb標準のドキュメントがMDNに統合される事(既に統合は進んでいる)を知らないようだ
ゴミクズ回答者にとっては、時間と金をかけて必死で積み上げた取って置きの知識だろうけど
今は無料で即時に入手出来るんだよ
Mapの利点を長々と解説してたが、三平方の定理を発見した古代人がドヤ顔で解説してるようで滑稽だったよ 初歩的な質問失礼。
ある非同期関数があるとき、それをwrapして同期版を作るうまい方法ってないですかね?
fs.open()を使ってfs.openSync()を作るようなイメージ。 promise
generator runner は、promise と組み合わせて、非同期処理を同期的に書ける。
つまり例外処理を使える(同じコンテキスト)
co, Koa を使う generator runner
非同期のpromise をラップして、同期処理にしたもの
同期f(){
yield 非同期のpromise;
}
yield で、promise が満たされるまで止まる >>586
回答ありがとうございます。
けどこれyieldで止まります?同期f()はgeneratorですよね?
単にnext()でPromiseが返るだけのような。 yield 非同期のpromise;
yield で、promise が満たされるまで止まるように、iterator, generator を作ると、
ES2017 の、async/await と同じになる
それが、co, Koa なんだろう >>580
それは二次ドキュメントが統合されるってことだよ
ってか、君は何なん?ゴミクズに野次を飛ばして楽しむ傍聴人?
ドキュメントがあるで済むなら言語質問スレなんていらんがな >>589
やっぱりなにか勘違いしてる。
async/await使ったってfs.openSync()のような同期処理は無理でしょ。 >>590
ドキュメントにそのまま載っている内容を質問する馬鹿は死ねでいいでしょ
ググれないブスも死ねでいい >>592
気持ちは分かるが、説明書を読むのと、人から教えられるのではやっぱ感触が違うからな
ROMってる奴のほうが多いと思うし、その人の為、もしくは例え既知であってももう一度それに付いて考えてみる機会ができたという点で為になってると思うよ >>593
ならねーよ。死ねよ。
考える機会が欲しいのなら、自分でMDNを定期的に読み返せば済む。
自己完結できない奴は上達しないし、そもそもプログラマに向いてない。
小学1年生の教科書を毎年読み返しても、お前みたいな小学1年生レベルの馬鹿から進歩できないだろ。
JavaScriptのスレはマジで酷いぞ。少しは他スレも読んでみるといい。
当然他スレにも初心者は沸いているわけでね。
何故JavaScriptだけこんなに酷いのかは、俺にはいまだによく分からんが。
568のqiita、20年やっててこの程度しか書けないのか?と思うよ。
JavaScripterは、文法にだけやたらこだわっていて、プログラマとしては全く上達してない。 >>594
そんなことないと思うよ
これを機にMapについてより深く知った人も多いと思うし
自分もこれまでMapをどう使ってきたかなって思い起こす機械になったし
沢山の物があるWeb学習において重要なことは、
機会があった時に深く知ることを繰り返すことだと思うよ
基礎を完璧に抑えて応用を学んだ行くというのは不可能
だから時々基礎に立ち返る価値はいつになってもあるし、
例えMDNが90点で、ここの情報が2,30点の集まりだったとしても、
色んな人の色んな角度から情報を理解するってことも重要
JSもだし、Webっていうのは皆で作っていくものだからね
言葉の定義や何が良いことかっていうのも、
その瞬間に世界のJSerやWebデベロッパーが何をどう考えているかで変わってくる
だから文法や文脈に拘るっていうのもとても大切なことで
JSerやWebデベロッパーにとってそのすり合わせのための機会っていうのも重要
正解が無く、むしろその自由さが良いこととされている環境だが、だからこそ常に正解を見つけていかないといけない
だから皆が独自に正解を考えるが、実際その環境で何が正解と言えるかというと皆の意見の総和ということになる
だから自分のこだわりを認めてもらおうと、広めようと躍起になって良く揉めるが、それも環境の進化のために必要なこと
その点中央政権があったり、よりプロプライエタリな他言語環境とは雰囲気が違うのは当然 >>595
ゴミクズ韓国人な私はいつまで経っても馬鹿のまま、まで読んだ。
まあとにかく、ググればすぐ分かること、或いはMDNに明示的に書いてあることすらも受け付けるというのなら、
そういう連中を集めて、新しいスレを作ってくれないかな?
何故、既存のスレを乗っ取ろうとする?背乗り韓国人なら死ねよマジで。
韓国人死ね
君がそう思っている。
俺はそうは全く思ってないし、こちらが2chでは主流派だ。
Web流を自負するなら、背乗りではなくて、フォークで決着するべきだ。
何故それをしない?
それで、君達の新しいスレが繁栄し、持続すれば、君達が正しかったことになる。
お前が言っていることは、まんまゴミクズ在日韓国人の言い訳と同じだ。
お前みたいな在日韓国人は死ねとしか思わないね。
既に何度も言っているが、
俺は君たちが新しく作ったスレには行かないし、Web板のスレにも投稿しない。
それで、俺が居るスレと、俺が居ないスレで、どっちが良くなるか勝負しようと何度も誘っている。
俺が居ないスレの方が良いスレになるようなら、俺の存在価値は無い証明になる。
逆に、君たちの居ないスレの方が良いスレになるようなら、お前らがゴミでありゴキブリである証明になる。
こういう、建設的な勝負をしようと既に何度も誘っている。
お前らは受ける勇気もないヘタレだ。属国5000年のヘタレなDNAは伊達ではない、というところか。
再度言う、韓国人死ね ある要素にaddEventListenerでイベントリスナを登録したんですが
この要素を削除すればイベントリスナも削除されますか?
見えない所に残ったままになりませんかね?
要素を削除する前にremoveEventListenerをするべきでしょうか? >>596
なんでネトウヨがJavaScriptスレにいるんだよww
ほんまハゲやなお前は >>597
ある要素に、EventListener を付けて、その要素の先祖の要素を削除すると、
EventListener が付いたままになって、メモリリークを起こすのでは?
Backbone では、メモリリークになるけど、
jQuery では、削除した要素の、すべての子孫の要素の、
EventListener も削除するからメモリリークにならない、と何かで読んだことがある
まあ、デバッグして確かめるしかない >>597
>>600
お前らもいい加減死ね
何度目だその質問?だし、
過去スレどころかこのスレ内で既に回答されてるし、
回答600も間違ってるし。
全ての点において救いようがない。
まあそれでも、お前らがそれに価値があると思うのなら、フォークしろ。
つまり、別スレとして新たな方式、お前らが目指している、
・同じ質問を何度でもおk
・ググってすぐ見つかる事も質問してよし
・MDNに明示的に書いてあることも質問してよし
・日本語が不自由でもよし
・間違った回答も歓迎
・ゴキブリ韓国人も歓迎
を作って、試してみればいい。
俺は無理だと思うが、この見立てが間違っているのなら、俺が老害である証明になる。
そうではなく、お前らでまともに成立するスレを作れないのなら、お前らこそが荒らしなんだよ。
マジでそれを自覚して、背乗りは止めろ。誰のためにもならない。
韓国人死ね フォークは無意味
分けるんなら「質問スレ」を消して両方別名でpart1から始めるべき フォークなんて何の意味もない
質問スレなんだから質問と回答だけを書け
ハゲは消え失せろ
以上 一応Web板にも質問スレはあって、そこも十分機能しているわけだから、
お前らが乱入してこなければ、フォークとして機能しているんだよ。
だからとりあえずWeb板に戻って、そこで自由にやってくれないかな?
俺は何度もそっちには口出ししないと宣言している。
お前らに足りないのはIDではなく、お前ら自身の民度だと、お前らにも分かってきていると思うけど、
それでもIDが欲しければ、Web板民で話し合って、
君らで自由にテンプレ作ってIDありの板でスレ立ててみればいい。
それで君らのスレの方が繁栄すれば、君らの勝ちだよ。分かりやすい話だ。
ただなあ、ググレカスなのは2chのみならず、Web全体の文化であり、
何故そうなっているのかすら理解できず、
「ウリが正しいニダ」と声闘をするゴキブリ韓国人級の知能では、どうにもならないとは思うけど。
まあそれでも、やってみて、まずは己の無力さを理解することだね。
韓国人死ね 乱入ワロタw
お前のスレじゃねーんだよゴミ
お前が出て行けばそれで誰にとってもハッピーなんだって分からんか? まあ、世界中から韓国人が死滅すれば、世界はずいぶんマシになるよ。
韓国人の一番の問題は、韓国人が何故嫌われているのか全く理解できないことだからね。
韓国人死ね
そしてお前らの問題は、お前らが韓国人と同じ事をやっていることを理解できないことだ。
まずはそれを理解しないと始まらない。
俺が言っている方針、
・まずググレ
・公式ドキュメントに書いてあることを質問するな
・過去スレを読め
なんてのは、2ch/Web全体の文化であって、
少なくとも何故こうなっているのか理解できない馬鹿にこれを凌ぐ物を作ることは出来ない。
君らは君らが馬鹿であることを自覚するところから始めないといけない。本当に終わってる。
俺が出て行っても、状況は変わらんよ。これはWeb全体の文化だから。
相手を追い出しさえすれば全て解決というのは、完全に在日ゴキブリ韓国人の論理だね。
それはそうとして、これは結局例のコピペ「コミュニティの一生」の終末状態であり、
https: dic nicovideo jp/a/%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%E3%81%AE%E4%B8%80%E7%94%9F
2chにはこれを防ぐための方策がないのも事実だ。
そこで俺はこれについての対策を持った掲示板を立ち上げたいとは思っているんだが、
仕様についてアイデアがある奴はいるか?
例えば、ふたばの仕様、
・1はスレ内の任意のレスを消せる(style.display = 'none';)
・1によって3回消されたらその人はスレ内BAN
で解決するかね?
或いは、他のアイデアがあれば是非。 自分で調べろというのはごもっともだがそれはどちらかと言うとマナーの範疇
そういう人にググれカスだの半年ROMってろって言うのまで含めて2chの文化だが
それはあくまで背中を押すような一種の愛情表現であって
不愉快だからスレから出て行けというのとは違うけどな
今このスレに大事なのはもっと気軽に馬鹿な質問をしてもらうことで
そういうのを消すことじゃないだろう つうかなんか悲しいよな
ここはJSを「自ら学ぶ人のための」質問スレッド
つまり質問者のためのスレで、回答者はその質問者を助けるためにいるわけなのにな
いつの間にか自分が嫌いな質問は許さん
自分が好きな回答ができない流れは許さんっていうのが増えたよな
質問者の数が減ったら大事にすべきなのに、むしろ立場が弱くなってきてるよな >>607,608
まあ君がどう思おうが君の勝手だが、
もし俺を追い出したいと思っているのなら、俺にアイデアを出してみてくれないか?
俺がそっちにかかりきりになれば、当然こっちは疎かになるし、win-winだろ。
2chのシステムでは、荒らしに居座られたら対策がない。
そして、今現在はそれ以前の、荒らしが荒らしと自覚できてないという状態だ。
日本語も通じないし、言うこともきかないし、さすがにどうにもならないよ。
韓国人死ね >>609
君の末尾の文句は荒らし行為じゃないの?
もしなんでも良いから〇〇死ねと末尾に付ける人が居たとして
君はそれは荒らしだと思わないの? 【2chスレの一生】
日本人が良スレを作る
↓
良スレだからゴキブリ韓国人が集まってくる
↓
住み着いたゴキブリ韓国人が居場所を守るために主張し始める
↓
良スレを作った日本人達が見切りをつけて居なくなる
↓
残ったゴキブリ韓国人達がスレを乗っ取る
↓
ゴミスレなので誰も居なくなる
2chはこれを防ぐシステムを持ち合わせていない。
ここが致命的な弱点で、改善すべきだ。
俺は何とかして2chを
・韓国人の居る、現在の2ch
・韓国人の居ない、新しい2ch
にフォークしようとしている。
それで新2chの方が継続的に盛り上がるようなら、
・韓国人は殺すべき
という結論が承認/共有されることになる。
俺はこれを試そうとしている。
アイデア出しだけでも協力してくれれば助かる。 例えば手続き的にwordカウントするときkeyを単語、valueをカウンタにするじゃん。
objectなら o['hoge'] += 1 みたいな足しこみやインクリできるけど、Map だと明示的にget して1足してsetするのがセオリーなの? o.get("hoge").value++; ってすればいいよ なるほど、そうやるのか。
ありがとうございました。 まあこのvalueが何者であるかに
気づけるかどうかが問題なんだがなw >>613
そう
でも処理速度的にボトルネックになることは無いだろうし
Mapを継承したクラスにincメソッドを実装すればいいと思う React代替のライブラリとしてhyperappがqiitaで話題ですけど、
1kbのライブラリがReact+reduxと代替になるってすごいですよね。
逆になんでReactって単なるUIライブラリなのにこんなにサイズがでかいんですかね?
Reactの優位点ってエコシステムとしてって以外に何があるんですかね? Reactはまんまエコシステムじゃん
ReactNativeだってあるしReactNativeWebだってあるくらいだし 代替にならないからに決まってるじゃん
1KBのライブラリなら読めばいいのに >>620
機能だけを観るとreact+redux+非同期ミドルウェア
が1kbのライブラリに置き換わるというのが凄く魅力的なんですけど。
逆にReactにしかできないことが見当たらなくて、じゃあhyperappでいいじゃん
って思っちゃったんですよね。
もちろんiOSとかAndroidで使いたいとなったらReactNativeがある点で優位なんですけど、、、、、いまのところchrome-extensionで使う予定なんで、reactから移行してもいいのかもと思い始めた次第です。 hyperappでいいじゃんと言うけど
それWebAPIも発展してきたしフレームワークもライブラリもそろそろ要らないよねってことだぞ
ただ非同期周りとかちょっとまだ手が届かない所があるよねって感じ
chrome-extensionとか小規模なものだとそれこそ何にも要らないと思うぞ Node.jsで
const exec = require('child_process').exec;
みたいに
モジュール自体じゃなくてモジュールのメンバを変数に代入する書き方がありますが
こういう書き方のメリットは関数名などが短くなることの他にありますか?
どっちみちモジュールを全部読んでから一部をエクスポートしてるだけなので
メモリの節約にはならないですよね メモリの節約にはなるよ
参照のないオブジェクトはGCされるから なるほど…
じゃあ使うものだけを読む方が望ましいですね
ありがとうございました var str = "1\r\n2\r\n3\r\n\r\n4";
var arr = str.split(/\r\n/);
ブラウザでこのarr.lengthを取得すると当然5になります
ですが、WSHのJScriptでarr.lengthを取得すると4になります
何故か空行が削除されてしまうのです
これをマトモに動かすにはどうすればいいのでしょうか?
Windowsは10ですか、多分Windowsのバージョンは関係ないですよね >>626の件ですが
正規表現で文字列を split すると、できた配列から空の要素が消える
http://aligach.net/diary/20060707.html
>文字列で split すると JScript でも空要素は消えない。
というのがありました
これはひどいバグですね・・ f(){ g(){h()}}
でhだけが非同期関数の時hが呼び出されるのはfかgのどっちの後ですか?
現在実行中の関数のあとしか書いて無くて、fもgも実行しているのでどちらか
わかりませんでした。 その書き方じゃ何を表しているのか正確に分からんし
順番が知りたければ関数にalertでもconsole.logでも置けばいいだけじゃないか 非同期関数をその中に書いたら同期関数にできる関数があれば
何も考えずに同期化出来ていいのではないでしょうか?
そういうのはありますか? 同期「的」に書ける方法はあるよ
でも理由があって非同期になってるわけだから、
それが他の部分と必ずしも結合できるとは考えない方がいいし
あんまりこねくり回すとタイミングバグが起きたりもする
その辺きちんと整理できる能力が必要
取り敢えずPromiseとメソッドチェーンを理解してからasync-await electronでVisualStudioみたいなドッキングやフロートとかができるパネルレイアウトを実現するものはありますか? 質問変えます
VSCodeと同じレイアウト(右のパネル、タブ)を実現するものはありますか? 同期的で思い出したけど、JavaScript・・・じゃないな
ブラウザのDOMの仕様からalert, confirm, promptって廃止されないの?
だってこれら同期的に動くクソだもの NW.jsはビルドしたファイルを実行すると
ソースディレクトリがテンポラリディレクトリに展開されてそこで実行され
元のexeファイルのあるカレントディレクトリを取得できないという問題があります
ポータビリティを担保するためにカレントディレクトリにデータを保存したいので、
これは望ましくありません
Electronではこういうことはないのでしょうか? >>635
同期で動くのが必ずしも悪いこととは限らない
昔みたいにブラウザごと操作ブロックするものではなくなったし >>634
VSCodeはelectronで作られている。
VSCodeを作った人たちは、electronでVSCodeのレイアウトを実現したわけだ。 >>631-632
generator runner
co, Koa を使う
以下を参照
>>582-591 >>636
Electron アプリは、Node.js によって実行される
その際、package.json という設定ファイルに、
"main": "main.js"
とか書くと、そのファイルから起動される
この本を読む
Electronではじめるアプリ開発
~JavaScript/HTML/CSSでデスクトップアプリを作ろう
野口 将人・倉見 洋輔、2017 >>639
>以下を参照
>>>582-591
的外れだって突っ込まれてるじゃん。自虐か? 的外れと言う割に的外れでない回答がない件
それもそのはず的外れでないであろう回答をエスパーして
基本的で曖昧な疑問に答えるのは大変すぎるから
だから皆取り敢えずコンテキストが近くて
具体的で為になりそうな点に絞って回答してるというのに
それを的外れというのはそれこそ的外れ >>640
ありがとうございます
ただそのくらいは知ってます・・
NW.jsもnode.jsとwebkitから作られていて
両者が非常に良く似ていることからした質問です
ビルドされたバイナリの挙動は実際に使ってみないと分からないので >583 名前:デフォルトの名無しさん[sage] 投稿日:2017/12/31(日) 19:02:39.26 ID:B2mtcXzM
>ないです
「的外れでない回答」はこれだろ? こりゃ一本取られた
確かに矢を放たなければ外れようも無いわな
うまい! 質問です!
初めてjavascriptでWEBアプリを作ってるんですが、時間によって変化するデータを記録してブラウザに表示させるために
グローバル変数を使用しているのですが、そのデータが50種類近くあり、全てグローバル変数に保持させています。
ネットで調べると、グローバル汚染なる言葉があり、グローバル変数は極力使用するべきでないとありました。
でも、50種類近くのデータを保持し、各関数の中で計算させたりブラウザに数値を表示させるにはグローバル変数でしか無理なんじゃ無いかと思います。
初心者な質問ですがよろしくおねがいします! まあ別に幾らでもやりようはあるが、
その分だとまずコードを今の1/5から1/10ぐらいに減らすべきだろうな
無駄なコードが多すぎるだろう electronでデベロッパーツールにログを出力するのはどうすればいいのでしょうか?
console.logするとシェルのコンソールにログが出力されますが
これだとソース版の実行時にしかログが見られません 何と言うのか知りませんがバイナリにビルドする前の状態です >>649
サンプル通り作ってあるなら
mainWindow.loadURL(`file://${__dirname}/index.html`);
というような感じでindex.htmlをロードして表示していると思うけど
このindex.html内でconsole.logすればデベロッパー内でログを見れる >>652
そうなのですか
ありがとうございます
Electronは触った感じNW.jsよりも技術者寄りでイケてる感じがしますが
その分複雑なところがありますね >>636の件ですが
Electronの場合はビルドしたバイナリでも、
実行時のカレントディレクトリが正しく取得できました
まぁ当たり前の動作ではありますが・・。
NW.jsの方が古いプロダクトのようですが、
Electronに架橋するのがその歴史的意義で、既に使命を終えたんじゃないかと思います
Electronを触ったらもうNW.jsに戻ろうとは思えません エディタのVS Code, Atom が、Electron 製だろ
これらのエディタを使ってみれば、Electron で、何でも出来ることが良くわかる まあバイナリファイルの読み書きさえできれば
なんでもできるのは当たり前なんだけどなw titleを書き換えるブックマークレットを作っています
chrome開発者ツールのconsoleで
document.title = 'test';
とすると、何の問題もなく書き換わります
が、これを
javascript:document.title = 'test';
としてブックマークに登録してブックマークレットとして実行すると、
titleだけでなくdocumentの内容自体がtestという文字列に置き換わってしまいます
何が間違っているのでしょうか? resList.forEach(resNumber => {
$(`.resListPanel li.resItem[data-number="${resNumber}"]`).clone().appendTo(resListTree);
});
resListの要素数が70個だと2秒もかかるんだがどうする? const resItemList = resList.map(resNumber => {
return $(`.resListPanel li.resItem[data-number="${resNumber}"]`).clone();
});
これでもほぼ同じ resList.map(resNumber => {
return $(`.resListPanel li.resItem[data-number="${resNumber}"]`);
});
これでもほぼ同じ >>658
undefinedを返さないとその値でページを置き換えるようになっているのですね
ありがとうございました ブックマークレットはaタグのhrefにjavascript:と書いた時と
同じ動作をするもののようです
ここに書いたコードは返り値の返却が求められていることから、
ある種の関数として実行されていると推測します
ですがブックマークレットの解説が書かれたサイトには、
名前空間を汚染しないように即時関数で全体を囲む方がいいと書いてあります
しかしブックマークレットがすでに関数になっているのですから
即時関数にしなくても汚染は防げるのではないかと思ったのですが
どうなのでしょうか? 逆に聞くけどなんですでに関数になってると思い込んだの? >>664
returnを書いたら動作するからです
じゃあ違うんですか?
それならなぜreturnと書けるのでしょうか? <a href="javascript:var a = 1;return;">test</a>
と書いてみたら
SyntaxError: Illegal return statement
と出ました
ブックマークレットはaタグとは似て非なるもののようですね javascript:var a=1;return;
というブックマークレットと
javascript:alert(a);
というブックマークレットを作り、
最初のブックマークレットを実行してから次のブックマークレットを実行すると
aはundefinedだと言われました
やはりブックマークレットは関数として実行されているようです
aタグの場合は、あるタグで宣言代入した変数を
他のタグのコードから参照できました >>665-666
なぜブックマークレットでエラーが出ないと思いこんでるの? >>668
エラーを出しつつundefinedを返してるのかとも考えましたが
実際コンソールみてもエラー出てませんし。
というかもう答え出てますよね? Chrome/Firefox/Edgeで試してみたがエラー出るんだが chromeで試しましたが出ませんよ
ブラウザによって実装が異なる可能性もあるので他のブラウザは知りませんが
ブックマークレットという性格上、自分が使うブラウザで問題なければ別にいいです JavaScriptは最終的にビルドしてWebAssemblyに
するのが常識になっていくんじゃないかなーって
思っているんだけどどうですか? >>672
それは将来の素のJS≒TSをWASMにコンパイルしてリリースするのが常識になるかってこと?
既にトランスパイラやバンドラが使われているように、幾らか規模のある企業案件では良く使われることになると思うよ
あとはブラウザの拡張機能のようなパッケージ化されるものではそれが基本になると思う
だけど常識と言えるかどうかは分かんないね
2030年ごろにJSに実質的な寿命が来たとして、
その時に多くの言語から安全簡潔にWASM化する環境が整っていて、
ブラウザベンダー達が新しい言語を実装しないことを決定すればそうなるんじゃない? electronてメインプロセスとレンダラプロセスのJSはディレクトリを分けた方がいいと思うのですが
どうディレクトリを分けるのがスタンダードなんでしょうか? >>674
サンプルはいくらでもあるんだからパクれば良いのよ >>673
> その時に多くの言語から安全簡潔にWASM化する環境が整っていて、
その多くの言語からWASM化するってのはビルドですよね?
聞きたかったのはJavaScriptが生き残るかどうかじゃなくて
ビルドツールなしっていうのは考えられない世界になるのかなーって話です。 >>676
JavaScriptを普通に書きたいという需要が多い限りそんな世界にはならないということ
全てがHTTP2になるかっていうのとも似てる WASMが普及するとブラックボックス化して、Webへのアクセスの危険度が上がる気がする。メルトダウンとかが話題なくらいなんだから慎重に行かないとね。
とりあえずWASMはDOMに直接アクセスできないとか色々制限があるから >>675
ありがとうございます
すごくシンプルなアプリなので
main.jsとmainWindow.jsを同じディレクトリに置くことにしました >>678
メルトダウンはCPUのバグなんだからそれを引き合いに出すのは無茶だと思う
ただタイミングアタックって言うのは事前の想定が難しい脆弱性攻略法だからね
例えばサーバでパスワードやハッシュが正しいかチェックする際
正解の文字列と==で比較するとそれ即ち脆弱性になる
なぜなら==は大抵の場合文字列の頭からの1文字1文字合っているか確認していって、
間違っている場合そこで打ち切るから、サーバのレスポンス時間の統計を取れば
現実的な試行回数で正解文字列が頭から推測できていってしまう
SQLインジェクションとかよく騒がれるので、外から来たデータの扱いは
個人運営のサイトでも必ず相当に気にすると思うが、
内の状態を外に微塵も漏らさないための気配りができている場合は少ない
今回のCPU騒動の対策としてperformance.now()の精度が100nsに落とされたりしたが
過去にあったJSで外部画像やiframeにフィルタを書ける際の処理の重さから内容を推測したりとか
数msの精度があれば十分に成功するものもある
Web標準規格者、ブラウザ開発者のような大勢の優秀な技術者でも度々見落としてしまうのが
この手のバグなんだから、ある意味で仕方がない >>678
> WASMが普及するとブラックボックス化して、Webへのアクセスの危険度が上がる気がする。
スマホアプリと同じ状態になるだけだよ
危険度は今とまったく変わらないか、
ブラウザのセキュリティ内でしか動かないから
スマホアプリよりも安全 WASMはJavaScriptでできることしかできないから、
その意味でも安全といえる。
ソースコードが読みづらいってだけ
JavaScriptで難読化するのと変わらない
どうせ難読化されて無くても殆どの場合JavaScriptのコードを
なんて見ないんだから関係ない
よってWASMで危険になんかならない いや、JSのASTのバイナリのようなものというのはスタートラインであって
将来的には変わっていくと思うよ
現時点でも例えばSIMD APIを使ってSIMD命令を明示的に記述できるけど
もしここ関連でバグがあればより危険ってことになるからね バカタレ
なんで俺がわざわざこれを選んで挙げたか少しは考えることもできないのか?
JavaScriptでもできることになる予定だったけど撤廃される流れになってるだろ
現にV8はサポートしないことを決めて削除した
https://bugs.chromium.org/p/v8/issues/detail?id=6020&desc=2#c3
そのくらいの時系列知っとけ つかよく見たらそのページにも廃止されたって書いてあるじゃん >>686
そこに撤廃されるなんて書いてないじゃんw >>682
スマホアプリは一応アプリストアで管理されてるけどwebアプリは無理でしょ。 検索って言う超巨大なアプリストアがあるんだけど知ってる?
PWA云々ってのもこの流れの中の一つ >>692
> 検索って言う超巨大なアプリストアがあるんだけど知ってる?
知らない。ストアってことは有料なんだよね? どれだけアプリストアでセキュリティチェックされようと
超低レベルなCPUにバグがあっちゃお終いだし、
もしくは人がチェックするのも無理だから
超高レベルな悪意も防ぎようがない JSからも攻撃可能なメモリの同じ部分への超連続書き込みで
隣接セルを書き換えるって言うのも根本的な修正策は無いしね ElectronでネイティブのNodeモジュールを使う場合
リビルドが必要になりますが
このリビルドしたモジュールはアーキテクチャが同じなら
他のマシンでも使えるのでしょうか? 各OS で、コンパイル済みバイナリは異なるから、バイナリで持ち運べない。
ソースコードで持ち運んで、各OSでビルドする
Linux では、ディストリビューション間でも、バイナリが異なるかも知れない ただし例外もあって例えばUbuntuでコンパイルしたバイナリは
Windows上のWSL(Ubuntu)で動く
WSLがUbuntuでビルドしたバイナリを動く仕組みを提供しているからだ OSが違う時に走らないのは仕方ないですが
OSとアーキテクチャが同じなら、普通の実行ファイル同様、他のマシンでも走りますよね
ありがとうございました ネイティブモジュールは他の実行ファイルとは全く違う
V8のバージョンが変わると容易に壊れる 実行ファイルというのはモジュールのことではなく、
バイナリビルドしたアプリのことでした
ネイティブモジュールのリビルドが必要なのはV8のバージョンアップなどとの擦り合わせなのですね
ありがとうございました Single Page Applicationのデザインは
他のウェブサイトとは要件が少し違うと思います
ウェブページというよりもアプリケーションそのものなので。
SPAのデザインに関して参考になる本とかサイトとかありますか? ブラウザのhistory 関連とか、
戻るボタンには、どう対処するのかとか SPAって主にはただの普通のWebサイトにPjax導入した物を言うと思うぞ
それ以上の専用の設計がされているものはWebアプリって言う electronで、現在ソースで実行されているのかバイナリで実行されているかを
コードの中で判断するにはどうすればいいのでしょうか?
ソースでの実行時のみにデベロッパーツールを開くようにしたいです >>705
専用APIあるのかもしれないけどその他の方法として
フォルダ内にバイナリファイルがあるかどうかで調べればいい >>707
なるほど
それなら確かに判別できますね
ありがとうございました __dirname+'/実行ファイル'
の有無を調べたのですがうまく動きませんでした
どうもビルドとは言っても実行ファイルの中にJSが組み込まれているわけではなく
resources/app配下のJSを実行しているようです
それなら上の上の上のディレクトリの実行ファイルの有無を調べればいいと思ったのですが
それも何故かうまくいかず。
(書き方が悪かっただけかもしれません。未検証)
他の方法はないかと探して
path.basename(app.getPath('exe')) == 'electron.exe'
なら開発環境と判別するという方法にたどり着きました
もっといい方法もあるのかもしれませんが Railsアプリケーションには、production、development、testの3種類の環境があるけど、
Electron には、そういう環境変数は無いの? ドキュメントのappやprocessやEnvironment Variablesをざっと見ましたが
それっぽいのは見当たりませんでした
ビルドと言ってもelectron.exe相当の実行ファイルの名前や属性が変わるくらいなので
本質的な違いはないという思想なのかもしれません 初心者です。お願いします。
node.jsで以下のコードを実行したら、
TypeError: "callback" argument must be a functionというエラーが出ました。
var webclient = require("request");
function test(){
webclient.post({
url: "https://mevius.5ch.net/tech/subback.html"},
function (error, response, body){
console.log(body);
});
};
setInterval("test()",2000);
test()単体では動くのですが、定期的に実行するにはどうすればいいか教えてください。 ありがとうございますできました!
JS触って非同期処理?とか初めての概念が出てきてそっちが原因だとずっと勘違いしてました… エラーをよく読むこと
「"callback"引数は関数でなければなりません」 それで分かるレベルならこんなとこに質問に来ないと思うが…
「なるほど、文字列だからいけなかったんだね!
setInterval(test(),2000);
これでよし!」
こうなるのがオチ。>>713の態度が正解だと思う。 test() の( )は、関数呼び出し演算子
test は、関数オブジェクト >>716
違う
今回のことに限らずエラー文に答えがあるんだから
それを読み解けるように努力していこうねということ function f(){
return new Promise(resolve=>resolve (f());
}
なぜこの関数をthenすると無限ループになるのか教えてください。
fが評価されるのは一回にしかおもえないのですが教えてください。 thenしたときじゃなくてnewしたときにプロミスの中身は実行されるということですか? >>719
function f(){
return new Promise(resolve=>resolve (f());
}
↓
function f(){
let p = new Promise(resolve => {
return resolve (f());
});
return p;
}
↓
function f(){
let p = new Promise(resolve => {
console.log(1);
});
console.log(2);
}
f();
↓出力結果
1
2
つまり、f関数が戻るより前 = p が得られるより前にnew Promiseに渡した関数が
実行されるから。引数の関数は即時関数のようにすぐに実行されるんだよ。
その中でfを呼び出しているから再帰になる 解決策思いついたので発表させてください。
function f(){
return ()=>new Promise(resolve=>resolve(f()));
}
thenのとき関数に括弧をもう一つ付けます。 jsbinみたいなプレイグラウンドでローカルで実行できるものはないかと思ったのですが
jsbinはNode.jsで動いていてまさにローカルで実行できると知りました
ですが
https://github.com/jsbin/jsbin/blob/master/docs/running-your-own-jsbin.md
ここにある通りにnpm install -g jsbinとやっても警告とかいろいろ出てエラーになります
いろいろなパッケージの今のバージョンとは合わないっぽい感じです
jsbinをローカルで動かすための方法をまとめたサイトとかないでしょうか?
あるいは、今のNodeの環境ですんなりローカルで使えるプレイグラウンドはないでしょうか? pythonインストールするとjupyter notebook入るからjsでも使ってるわ。 EventEmitterは
onメソッドが呼ばれる前にemitされたら(現実的にはなかなかないでしょうが)
onメソッドが呼ばれたタイミングでコールバックが呼ばれるのでしょうか? ブラウザのEventは同イベントループ中なら順序は関係ないが
NodeのEventEmitterはそれはできない そうなんですか
まぁまずあり得ないので、それでも問題ないという判断なのでしょうね
ありがとうございました イベントはイベントループのスタックに登録されるといった概念上自然なのはブラウザの方
Nodeの方はemitされるとイベントループを経由せずに直接関数を呼んでるだけの簡単な実装
この違いはPromiseの挙動に慣れてたりすると複雑なシーンやObservable的なライブラリでバグの元になるかもしれない なにいってんだ?ブラウザとかイベントループとかそういうレベルの話じゃねーよ
基本的な設計を考えてみろ
イベントを受信する側は一体いくつ存在すると思ってる?
イベントを送信する側一つに対して、イベントを受信する側は複数存在するだろ
ブラウザで言えば、buttonのclickに対してaddEventListerで
イベントハンドラを複数結びつけることができる。
> onメソッドが呼ばれる前にemitされたら(現実的にはなかなかないでしょうが)
> onメソッドが呼ばれたタイミングでコールバックが呼ばれる
を実現するにはどうするか考えてみろ。
あとからイベントハンドラが設定される可能性を考えるということは
イベントハンドラが設定されていたとしても、全ての発生したイベントの情報を
ずーっと保持し続ければいけないということだ。
だってそうだろ? clickのイベントハンドラが1つ有ったとしても、もしかしたら
将来2つめのイベントハンドラが設定されるかもしれないんだから。
そんなメモリの無駄な使い方なんかやりません。
例えばWindowのloadイベントとかに限れば一回発動したら二回目は発動しないから、
onメソッドが呼ばれたタイミングでコールバック発動しても良いかもしれないが、
そういうのは特定のイベント特有の話だ。
特定のイベントに限って、onメソッドが呼ばれたタイミングでコールバック発動するための
サポート機能を持たせるのはありかもしれんが、少なくとも基本的な機能として
onメソッドが呼ばれる前に発生したイベントを保持するなんてことはまずしない
それはブラウザとかNodeとか関係ない一般的な設計としてだ emitがWindowsのSendMessageのような動作だったら便利だったのに、とは思う。 >全ての発生したイベントの情報をずーっと保持し続ければいけない
たしかにmousemoveなどを考えたら恐ろしいことになりますね
Node書くならEventEmitterについて知っとくべし
https://qiita.com/yuku_t/items/d69d3a2c7dafa7d04e87
疑問のきっかけはこのページを読んだからなのですが、
非同期関数の中でEventEmitterオブジェクトを生成し、
非同期処理完了後にemitを呼ぶようにしてから、EventEmitterを返却。
EventEmitterを受け取った呼び出し元は、それにonメソッドを発行するという流れですが
このように書いた非同期処理はどんなに処理が軽いものであっても
onよりも先に終わることはないと、JavaScriptのメカニズム的に保証されている、
と考えていいのでしょうか? setTimeoutやsetIntervalの処理はイベントキューに登録される。
イベントキューから取り出されるのは、メインスレッドの処理が終わった時。
つまり何らかの処理の最中にイベントが実行されることはない。
ということのようですね
関数から抜けたタイミングとかにもイベントが発生し得るのではないかと
漠然と思っていたのですが、そうではなくて、
すっかり処理が終わった時にのみイベントキューが消化される
なのでEventEmitterも確実に機能することが保証されているのですね
ありがとうございました >>731
お前こそ何言ってるんだ?
ここまで話されていることは全ての発生したイベントの情報をずーっと保持し続ければいけないと言うことにはならない
ただイベントの発火を同期でなく必ず次のイベントループ時に持ち越すというだけで
その同期中でのリスナと発火の順序は問わないということ
そしてこれは重要
基本的に遅延処理だが値を指定した際にキャッシュやエラーですぐコールバックが呼べる状況もある
そういうときにEventレイヤーで非同期を保証することでハンドラの設定順序による無用なバグを防ぐことができる >>731
JavaScriptなんてそんなもん。
馬鹿な質問に馬鹿が答え、しかもそれが間違っていることも割と普通で、馬鹿が再生産されてる。
現場とか壮絶だと思うよ。
間違ってもないコードを間違っていると言われ、間違っているように書き直させられるのでは、
まともなプログラマは寄りつかない。そして馬鹿に純化され、余計に馬鹿が再生産されるという悪循環。
というかな、根本的に分かってない奴が多すぎる。(プログラマとして未熟)
そして、質問者が馬鹿なのは致し方無しとしても、
回答者は他の回答者のレベルが分かるはずなのだから、
状況を把握して、自分は回答すべきか黙っておくべきか適切に判断しないといけない。
これも出来ない奴がJavaScripterには多すぎる。
(インターネット掲示板の使い方が未熟=人間として未熟)
これについては他Web系のPHP/Goは他言語並みにマシで、JavaScriptだけ酷いのはちょっと不思議なんだが。
そしてこの糞女はマジでそろそろ死んで欲しい。
根本的にこいつは分かってない。(どこが間違っているかは教えてやらないが)
お前らもこの糞女に対してレスする意味があるのかよく考えろ。
レスする=そいつにとって有効情報がでてくる=そいつが居着く事になる。
誰を殺し、誰を生かすかは回答者が決められる。
スレの質が低いのは、回答者のモラルが低いからだ。
迷惑しかかけないゴキブリ韓国人を殺すのは、正しいことだ。
人権屋は最近旗色が悪くて問題のすり替えに躍起だが、それに騙されてはいけない。
現実問題として、畑でいい野菜を育てる為には、
害虫は駆除しないと話にならないし、そのために農薬を使うわけでね。
匿名掲示板上で殺すのは躊躇しなくていい。
理由は簡単で、匿名掲示板上は原理的に差別がない場所だからだ。
韓国人死ね そして>>731,735のようなやりとりはやればいい。
どうやらお前らはこれを望んでいるようだし、今のお前らには必要なのだろう。
ただな、冷静に考えれば分かるはずだが、これ自体もずれていて、お前らは、
・何が仕様なのか
を議論しているが、それは本来は仕様書なりMDNを読めば終わる話だ。議論するものじゃない。
他言語では、
・仕様を分かった上で、それについてどう思うか/どうそれを生かすか
を議論している。
JavaScriptは比較的簡単な言語だ。
何故お前らがいつまでも仕様理解にトラップされているのか、俺にはよく分からない。
韓国人死ね
例えばな、>>730
× スタック
○ キュー
君がプログラマなら、この2つは正しく使い分けないといけない。今回は特に。
そして確かにNodeのEventEmitterは若干仕様が不適切だ。
NodeのAPIに合わせるなら、EventEmitterSyncと命名されてしかるべきだった。
https://nodejs.org/api/events.html#events_asynchronous_vs_synchronous
という話をするのならまだ分かるんだよ。
ただまあ、今回脱線しているのはそもそものこの糞女が根本から間違っているからであって、
君らが悪い感じでもないが。 >>736
前から思ってたがなんで女扱いなんだよ
意味不明の思い込みを炸裂させてんじゃねーぞハゲ >>738
いや間違いなくお前は糞女だよ。典型的な女のレスばかりだろ。
というかお前、むしろそれが分からないのはヤバイと思うが。
とはいえ、匿名掲示板上でのこの手の水掛け論の決着は非常に単純で、
・大多数の人にとって、どう見えるか
でしかない。
お前がどれだけ嘘の主張をしても、レスはどう見ても女でしかないし、誰も信じないよ。
ただこの際性別なんてどうでもいい。
お前はお前自身が荒らしであることを自覚して、死んでくれマジで。
お前がいる限り、スレの質はどんどん落ちていく。
だからお前は荒らしなんだよ。
敬語を使わないとか、死ね死ね言ったりとかは本質じゃないんだよ。
731-735のやりとりも、特に意味がない。(お互いそれなりに理解できている)
齟齬が発生しているのはスタートポイントがおかしいからであって、彼らの問題ではない。
正しいポイントから議論すれば彼らは噛み合うし、いい議論になったかもしれん。
ただ>>731,735がよく分からんのは、
君らはどうでもいいところでバトル始める癖に、自分では始めないことだ。
今回もこの糞女のスタートポイントから始めてるからおかしくなってる。
議論したいことがあるのなら、君らが勝手に始めればいいのさ。
韓国人死ね
一応>>731にもポイントを明示しておこうか?
> そんなメモリの無駄な使い方なんかやりません。
若干揚げ足取りだがこれは間違っていて、
一番少メモリの実装はフックでデイジーチェインする古来の方法だ。
ただしJavaScriptはそんなことはせず、イベントテーブルを持っていると思うがね。 >>739
完全病気やん
お前のいるべきところはJavaScriptスレじゃない
分かるな? 一番少メモリの実装はフックでデイジーチェインする古来の方法だ(キリッ >>736
馬鹿な答えを身をもって表現しなくても良いよ。 >>725の件ですが
VSCodeにそういう拡張機能はないかと思ったのですが
プレビュー系の拡張機能はJavaScriptが動かないものばかりです
VSCodeもElectronで動いているのですから、
webviewに表示すればJavaScriptも動くものが作れるのでは?
と思うのですが、そうはいかないのでしょうか? よく読んだけど、すごく長文で話をして嫌われる俺の長文よりひどいものを久しぶりに見たな。
何を語ってるのかよくわからん。
もしかして、すごく鋭い事を言ってるつもりなのかな。
EventEmitterSyncとモジュール自体にSync付けるのもよくやからんし、
emitが同期的に走ることを問題にしたいんだろうけど、そもそも同期非同期の関数を用意する場合は同期の方にSyncつけようね、ってルールだろ。
片方だけの時には関係ない。API眺めたら気づくだろ、常識的に考えて。 Electronを使えばわりと簡単にプレイグラウンドが作れるんじゃないか
と思うのですが、そういうものはもうありそうな気もします
ですが、検索しても見つかりません
ないのでしょうか? >>733
なんか外野が喚いているようだがw
> >全ての発生したイベントの情報をずーっと保持し続ければいけない
>
> たしかにmousemoveなどを考えたら恐ろしいことになりますね
そういうこと。仮に1日後にonするようなコードがあったら
onするより前に発生したイベントを全部伝えることの恐ろしさがわかるよね?
そんな設計にするわけがない。基本としてonより前に発生したイベントを捕まえることはない
余談だが、jQueryのreadyメソッド = $(function() {}) は
DOM APIではDOMContentLoadedを使えばいいと思うかもしれないが
実はDOMContentLoadedイベントが発生した後に、readyを呼び出しても
ちゃんとイベントハンドラは呼び出されるという違いが有る
つまりonするより前に発生したイベントを伝えるような挙動をしている。
DOMContentLoadedはページごとに一回しか発生しないのもあって
ユーザーにとって便利なようにそうなるように作られているんだ。
setTimeout(function() {
$(function() {
alert('ready'); // 呼び出される
});
document.addEventListener("DOMContentLoaded", function() {
alert('DOMContentLoaded'); // 呼び出されない
});
}, 3000); chrome-extenionを作っておりましてサイドバーの機能をiframeで作りました。
iframe内でUI操作をするので大部分のロジックがirame内に集中しているのですが
通信ができないためbackground.js側にメッセージ送信を介して外部と通信するような仕様になっています。
こんな状況でバグトラッキングを行いたいと思ったらどういうライブラリが考えられるでしょうか? >>746
日本人が日本語で書いても理解できないなんて、まるで
日本人でないみたいだなぁ。
Syncの付け方間違ってるよ、って。 >>747
別に必ず全部保持して全部伝える必要性は無くね?
最後のイベント保持して伝えて欲しいっていうユースケースは多いと思うよ
最近はaddEventListener第三引数にオプションオブジェクトが指定できるようになってて
間隔間引く提案とか色々されてきてるから、最後のイベントを得るようにもできるようになると思うよ >>749
韓国人死ね
お前らはそうやってすぐ声闘するのも特徴だ。
喚けばそれが事実として認識されるのは、韓国人には馬鹿しかいないから。
それで日本人を騙すのはもう無理だ。ウザイだけだから韓国人はマジで死ね。
俺の日本語に問題があるから意味が取れないという主張で俺を叩く気なら、
少なくとも>>744内の日本語は完璧じゃないといけない。(日本人的には)
間違いなく言えるのは、>>744,749は韓国人であること。
・この程度の簡単な論理すら理解できない。
・749は744の日本語の間違いに気づけないからこそ「追い打ちできる」と勘違いしている。
分かるか?表面的な書き込みではなく、相手がどうしてそういう書き込みに至ったかを読みとるんだ。
叩くなら叩くでいいとして、
肝心の先鋒744があの日本語では、普通の日本人なら二の矢を継ぐ気にはならんだろ。
そして俺はそれを正面から分かりやすく指摘してるのに、(746)
749は出てきた。この感覚の違いを読みとるんだ。
もっと単純に言えば、自分だったら何を選択するか?を考えればいい。(黙るってのも含めて)
そこで自分と違う反応をしたのなら、それは君と彼の立ち位置の違いなんだよ。
自分の立ち位置を正しく理解できているのなら、相手の立ち位置を逆算できる。
「違和感」を感じ取って、それを頼りに辿るんだよ。
JavaScriptのスレだけ酷いのは、お前らが酷いからだよ。
技術レベルも酷いが、緊喫の問題はお前らの人間レベルだ。
だから上記をよく読んで読み方を学び、このスレの何が問題なのか、各自で理解しろ。
そして誰を殺すべきか、きちんと考えろ。
繰り返すが、匿名掲示板上で殺すのは躊躇しなくていい。
それは純粋に書き込みが酷かったからであり、ここは差別の存在しようのない世界だ。
似非人権屋、パヨク、韓国人は纏めて殺していい。 >>750
> 最後のイベント保持して伝えて欲しいっていうユースケースは多いと思うよ
例えばどんなユースケース?
念の為に言っておくと最後のイベントが送られているというのは
例えば1時間前に起きたイベントをonでイベントハンドラを付けた時に伝えられるとか、
あるオブジェクトが複数種類のイベントを送信する時onchangeとかonkeydownとか
onkeyupとonclickとかonmousemoveとかその全部が送られてくるっていうことだからね
(最後の一種類しか送られてこないとしたらonmousemoveでほとんど打ち消されるだろう)
そんなことをされても迷惑な場合しか思いつかない まだ勘違いしてる点がありそうだから補足しておくと
「最後のイベントを伝える」ということの意味は
イベントを送信するsenderオブジェクトがいたとして
そのsenderオブジェクトからevent1というイベントが送信される
一時間後、reciever1がon('event1', function() })すると
すぐにイベントハンドラが呼び出される。
その一時間後、reciever2がon('event1', function() })すると
やっぱりイベントハンドラが呼び出される
その一時間後に、reciever3がon('event1', function() })するかどうかは
未来にならないとわからないので、最後のイベントであるevent1を
ずーっと保持し続けなければならないということ >>754
mousemoveが複数送られた時、最後の一つだけあればいいよね。それならメモリも少ないし
ってことじゃないのか >>756
だからそれをどういう時にそれを使いたいのか?ってことなんだ
なんども一時間後にと言ってることから推測してくれ
画面をスクロールとかしてそのイベントを発生させた
要素が画面外にある時、mousemoveを受け取って、
それでやりたいことがあるのか?ってこと
「よくあるユースケース」というがそのユースケースが思いつかないよ
逆に予想外のことが起きたとしか思わないだろう。
なんで今その要素触ってないのに、その要素からmousemouveイベとが
発生したんだ?って混乱するだけでしょ。 もちろん限られたユースケースなら考えつくと思うよ
だけど基本機能に組み込むほどの需要ないだろ? >>751
と言うか、
>>744が日本語として完璧である必要は無いし、逆に>>751は>>744で挙げているSyncと言うかサフィックスの付け方の間違いの指摘(同期関数には無差別につけるべき、ではない)に対しての反論が含まれてるべきだと思うが。
斜めに読んだ感じ「間違ってました、ごめんなさい」が言えずに長文で論点をそらしにかかってるようにしか取れない。
だから、三行で、別の話は持ち出さずに命名規則としてソースを出して反論して。 >>757
これからはasync-awaitとESModuleが主流になってくるけど
それで必要になったときにロードかけて、例えば君が言ってたDOMCLなんかをそのモジュールから登録すると取りこぼすのよ
他に実際困ったケースを挙げるとmessageとか
取りこぼしを考えると無駄にやり取りのロジックが必要になる うーん
キャンバスでマウスの動きに合わせて特殊なラインを書くモードのボタンを押したときに
そのモジュールがロードされるまでのイベントを取りこぼしてしまうっていうのを想像したが
それだと最後の1つだけじゃ機能不足になるな
出来る限り個別の機能はモジュールに任せてメイン側で特別な工夫はしたくないとしたらどうすればいいのだろう
イベント発生を止めて貯めるということができればいいか
その間他のモジュールにも影響が出てしまうけれど、逆に他のモジュールと足並み揃えられるから現実的か
だけどモジュールによっては足並みを揃えない方が良い場合もあるだろうし
これでもモジュールが止めるまでの間、メイン側で行ったとしても実際イベントが伝播してくるイベントループと、
イベントを貯め始める処理を開始するまでの間にループがいくらか回ってしまう可能性がある
async世界で抽象化してると、イベントが起きてそのイベントハンドラの中ですぐ何かをすると言うことが難しくなる
モバイルで音声鳴らすときにも同じような問題がある
つまり、クリックされてその流れで音声鳴らすコードを書いても
思ったより間隔が開いて(確か100msくらい開くと駄目)しまうかも知れない
ということでそこだけ特別な書き方をしないといけないという問題
イベントは本当に難しい >>759-760
韓国人死ね
意味が取れないことを隠す為に「斜めに読んで」と言い訳している時点でお察し。
俺の日本語について文句を言っているのにひよるとか、マジで韓国人ですと自白しているようなもの。
(これは749の時点で既にそうだが)
お前らの立場なら、どんどん俺の日本語の問題点をあげつらってこないとおかしいだろ。
こういった、整合性が全くなく、ただ叫ぶのも連呼リアンの特徴。
「三行」の主張も中身は同じ。
俺の日本語に駄目出し出来るほど日本語が上手いつもりなら、三行にこだわるとか頭おかしいだろ。
2chの長文なんて、世間では短文だ。一瞬で読めなくてどうする?
MDNにしても、どのページも三行では書いてない。
三行しか読めないようなら、今後プログラマを続けるのは無理だ。辞めた方がいい。
池沼韓国人はマジで死ね。
まあとにかく、このスレをよくする為にはどうすればいいか、お前ら自身が考えろ。
ただそれ以前に、お前らはいろいろ読めてない。
少なくとも、俺が具体的に示していることくらいは読めるようにしろ。
そうすれば、もっと匿名掲示板を楽しめるようになるから。
そして、日本語/論理が通じない韓国人を殺すことを躊躇するな。
お前らが大学生だとして、幼稚園児に研究室に乱入してこられても困るだろ。
適当になだめて、出ていってもらうのが妥当だ。そうじゃないと研究室が機能しない。
お前らが議論したいのなら、議論に耐えない日本語/論理能力の人は出ていってもらうのが妥当だ。
これは本当に当たり前の話だ。パヨクやゴキブリ韓国人に騙されてはいけない。
レベルの高い奴らが深く話し込みたいとして、馬鹿がそれを邪魔する権利はない。 >>763
日本語が問題じゃないからあげつらわないよ。バカなの?
お前の考えてるSyncというプレフィックスの付け方が問題で、そしてそれは間違ってるって言ってるんだけど。
間違ってたか合ってたかの二択で答えられるようにしたのに、まるで日本人では無いかのように感情に基づいた(しかも意味のない)長文だな。
で、間違いか正解かどっちだったの? 三行と言ったのは、
「合ってるor間違ってる」
「それはこういう理由」
「謝辞or訂正」
で充分だからであって、三行以上読まないって言ってる訳じゃ無い。
三行にまとめられなきゃ無能だよと言ってるだけだ。 > 三行しか読めないようなら、今後プログラマを続けるのは無理だ。辞めた方がいい。
そりゃ誰だって中身もないのに無駄な長文は読みたくないっしょ
簡潔な文が書けないと今後プログラマを続けるのは無理だからやめた方がよい >>764
韓国人死ね
> 日本語が問題じゃないからあげつらわないよ。バカなの?
なら俺の投稿を全部読み直し、お前の間違いを謝るのが先だな。
というか、日本人ならそうする。 >>761
> 君が言ってたDOMCLなんかを
何の話なのか分からんが、正しい使い方をして取りこぼしているなら
ライブラリの問題としか思わんが。
まあ実際は間違った使い方をしてるだけだろうね。
コード書いてごらん? 修正してあげるから >>770
上で挙がってたjQueryのreadyはDOMContentLoaded過ぎても効くし、
DOMCLには対応するdocument.readyStateがあるよねってこと
例えばじゃあ今からマウスの位置に何かを表示しますってしようとしても
そこからマウスが動かなくていつまで経ってもmousemoveイベントが起きないといつまでも表示されないし、
もちろんそれで致命的な何かが起きるわけではないけれど、
今Webでもリッチなアプリが作れるようになってきてる訳でそういう細かいデザインも気になってくる
かと言ってあまり複雑なことはしたくないということ
だからdocument.readyのように
documentレイヤーだけでいいからlastEvent.mousemoveみたいなのがあったら結構楽になる
でも一々イベント履歴をチェックするのも面倒だから、できればaddEventListenerで取りたいけど、
実際無制限にするわけには行かないから、一つの落とし所としてはここからイベントを貯めるという指定ができるようにすること > 上で挙がってたjQueryのreadyはDOMContentLoaded過ぎても効くし、
readyはイベントじゃないからね
だからなんなんだ?としか思えないが
何が言いたいんだ? >>770
そうすれば、ターゲットがクリックされたことを機会に、ターゲットをフリーズさせて、
その間にドラッグするためのモジュールを読み込んでそこから再開するというようなことができる
ただ厳密に言うと、async-await、observable的に書いたりフレームワーク使うと
そのイベントの直接のハンドラ呼び出しから同期的に処理が続くとは限らない、
例えばasync関数を呼び出すとそれは次回のジョブキューに登録され、おそらくブラウザだと次回のイベントループ時に処理される
それが組み合わさってくると、クリックされたことを契機に、それからの別のイベントを把握しようと考えても
その一瞬以下の間に1つ2つ取りこぼすロジック上の可能性を残してしまう
そしてこれが発生すると迷惑な事象、つまりバグ挙動になることが多い
ドラッグくらいじゃそんなに大したことにはならないと思うが、メッセージングとかだと0に近い可能性でも駄目なので
確実性を出すためにメッセージにidを振るだとか、再送要求を設計するとか面倒くさい気遣いがかかってしまう
結局はモバイルの音出しの問題のようにasyncな世界を外れたフックが必要になるんだけど、
そこを愚直に書くと汚らしくなるので、今のジョブキューや今のイベントループといった状態を得るためのAPIが要るんじゃないかと思う
ちょっと違うが、ECMAにZoneという、これまたまあまあ違うがNodeの昔のdomain的雰囲気を持ったAPIが提案されてるが
そういうのがいいのかもしれない >>771
> 例えばじゃあ今からマウスの位置に何かを表示しますってしようとしても
今のマウスの位置に何かを表示したいのか
それとも一時間前に発火したイベントのマウスの位置に
何かを表示したいのかはっきり言ってしてくれる? > documentレイヤーだけでいいからlastEvent.mousemoveみたいなのがあったら結構楽になる
いらん。documentのmousemoveで
xとyを保存するだけでいい。
それだけで解決できる問題なのに
イベントの仕組みを複雑化させて
需要の少ないユースケースに対応するのはアホ >>772
要するに、asyncな世界でイベントハンドリングを確実に綺麗に上手くできやすくするための
なんらかの、そして幾つかの標準による補助機能が必要という話
たとえばaddEventListnerの第三引数のオプションの指定を増やす
抜本的な改革はその方向じゃ難しいかも知れないが、 >>774
話が噛み合っていないね
ここから先と指定できればいいが、ずっと貯めておくのは非現実的だし、
ならそういう標準的な補助の話を一旦抜きとしても一般的な話をしてもやっぱり
マウスダウンが起きた、ではここから先のマウス移動を見よう、としてもasyncな世界だと
onmousedown=e=>onmousemove=
みたいな同期的なロジックではないのだから、
クリックが起きてから、マウスの移動を検知し始めるまでに1つイベントが走ってしまうかもしてない
つまり、マウスダウンされた瞬間超人的なスピードでマウスが動いた場合、取りこぼすということ
ドラッグの話の場合大げさなことかもしれないが、
それでも同期的に書いてた頃はイベントループという仕組みでこういうケースも保護されていた
でもそれが無くなると、本当に様々な心配事が出てきて、それは実際起きうることだったりもするという話
その一つの解決策は、onmousedown=に直接フックして、同期的に>>775の処理だけでもしとくことだが、
そうするとせっかくの抽象化async世界が壊れる
それなら最初から同期的に昔からの書き方で書いとけばいいということになる
そういう問題 > つまり、マウスダウンされた瞬間超人的なスピードでマウスが動いた場合、取りこぼすということ
うん? それが最後のイベントをonした瞬間に再生したら解決できるとでも?
Aの位置でマウスダウン発生、超人的なスピードでBの位置に移動、
onしてマウスダウンを捕まえたら、今Bの位置にいるのに
Aの位置でマウスダウン発生だよね >>779
最後のイベントだけでは有効なケースはより限られるという話はした
ただそれでもDOMC.L.みたいなケースには有効
だからそういうのもあるけど、もしくはここから先イベントを貯めると言うことができればいいかもという話もして、
それも完璧じゃないけど、改善作は欲しいよねという話になってる
だけどここまで考えてやっぱりObservableAPIが良いのかなと思い始めた
つまりdragstart = mousedown.flatMap(() =>mousemove
とかした際にそのフレームワークがしっかり可同期的に設計されていれば
とりあえず、mousedownからmousemoveまでの間の取りこぼしはなくなる
もちろんfor await dragとかをしてもそこは非同期だから
そのドラッグから次に何かをするまでの間は気をつけないといけないけれど、
こういうようにイベントを組み合わせて1つのイベントとして固めておくと言うことができればかなりの問題緩和策になる
問題はObservableが標準に入ったとき、async generatorとかあるのに対し内部的に同期で回せる設計でやってくるのかということだな なんかこの人が何を勘違いしているかわかった気がするわw
説明めんどくせーなー、
イベントの情報っていうのを
わかってないんだよなー
イベントを只の割り込みみたいな扱いをして
イベントの情報を使うのじゃなくて
割り込みが発生した時点の情報をかき集めて
処理しようとしてるんだな。
イベント発生時点で情報をもたせればいいだけなのに
うん、やっぱりコードの書き方が間違ってるってわかったから
もういいよw >>781
だから例えば、ドラッグ=マウスダウン→flatmap:マウスムーブ→until:マウスアップ、と設計するように
あるイベントが発生してそれから先また別のイベントを補足したいってことはよくあるけど
同期的に書いてそのイベントループ中にイベントの補足を開始できればいいけど
async関数使ってると原理的にそこが保証されないコードになることがあるよね
それを簡単に改善できる方法ってないのかなって話だよ
イベント発生時点でやれば良いって言っても
async関数でイベントをawaitしてるとイベントが起きたループとは実際処理が走るのはずれるのよ
つまり
new Promise((_ok)=>{ok=_ok}).then(e=>console.log('P'))
のとき
onclick=e=>{
ok(e)
console.log('C')
}
とすると、C→Pの順番で呼ばれるでしょ?
Promiseってのか解決と同時にコールバックが走るわけじゃないんだから、
そこで隙間が開いてしまって、積み重なるとタイミングバグの元になるのよ
それを確実に回避するためにはイベントハンドラを使って同期的に処理を書き連ねていかないといけないから
async世界と相性悪いねって話だよ >>782
onした時点で最後のイベント発生してほしいという話と
全く関係ないない。
えとな、お前が言いたいのは、
イベントが発生した順番で、
イベントハンドラが呼び出されてほしい
ってだけだろ
それだけだろ。いちいち話を複雑にさせやがって
UDPの順番は保証されませんという
問題を解決する話と一緒だ。 node.jsでUTF8ファイルにBOMを追加するという処理を書きました
BOMというのはFEFFという2バイトのバイナリなので
ファイルに書き込む文字列の先頭に
'\ufeff'
を付加すればいいとネットで知り、そのとおりにやって実際に動作しています
\uを使ってバイナリを書き込むことに関して疑問を持ちました
\uという記法は4桁の16進数でUnicode文字を記述する方法とあります
Unicode文字は「任意のバイナリ」とイコールではないと思いますが、
どうなのでしょうか?
今回はFEFFが偶然unicodeのコードの範囲におさまっていたから問題なく書けたのでしょうか?
それともこの書き方でどんなバイナリデータでも書けるのでしょうか?
だとしたら「Unicode」っていう必要あるか?と思うのですが、どうなのでしょうか? バイナリの2バイトFEFFを付加するという認識が間違ってて
UnicodeのU+FEFF ZERO WIDTH NO-BREAK SPACEを
書き込むというのが正しい うっかり投稿してしまった
U+FEFFはUTF-16(Unicode)としてはFEFFと呼称されるが
実際にファイルに書き込まれる時はエンディアンによってバイト順序が変わる
ビッグエンディアン=FE FF
リトルエンディアン=FF FE
だからファイルを開く際にOSが先頭2バイトを見て
FE FFならビッグエンディアンのUTF-16
FF FEならリトルエンディアンのUTF-16と判断できる >>769
謝罪だけを求めるなんてどこの国の人なんでしょ。
とりあえず、おまえがあってたか間違ってたかを答えて。
その結果俺の行動は考えるよ。
お前の自己責任で謝罪が得られていないようなもんだ。 >>785-786
FEもFFもUnicodeのコード領域に含まれたUnicode文字列なのですね
\u記法を任意のバイナリを書き込むために使うことは、できるかどうかしりませんが、
たとえできたとしても推奨はされない方法ということでしょうね
ありがとうございました FEとFFが別々の意味かと勘違いしていました
FEFFで「ZERO WIDTH NO-BREAK SPACE」という一文字なのですね ついでだから、何故韓国人を殺さなければならないか、さらに説明しておく。
非韓三原則
韓国人には、助けない、教えない、関わらない
日本人はディベートが下手だが、これは場数を踏んでないからだ。
論理は出来ている。上手くなる為には後は場数を踏むしかない。
>>757から一連のレスは(内容はさておきディベートの形式は)まあまあだ。
だから、やりたいのなら気が済むまでやればいい。
それに対して、韓国人>>760は糞だ。
これはパヨク/韓国人/ヤクザの論法で、相手にしても何も得られない。
だから相手をしてはいけない。韓国人/ヤクザは無視して殺すべきだ。
違いを見分けるのは(知っていれば)簡単だ。
ディベートはある事柄に対し「どちらがいいか」を決着する物だ。
だから通常戦術は「相手の意見を否定しつつ、『自分の意見を補強』(ここ大事)する」ことになる。
自分の意見が優勢なら+、劣勢なら−としてスコアを付けると、
通常、双方の発言で0を挟んで天秤のように振れ、発言毎に、+1, -2, +2, -1 といった経路を辿る。
これに対して、パヨク/韓国人/ヤクザの論法はそうじゃない。
「相手を否定すること」だけを目的とし、自説の補強は全く行わない。
そして「対応できない相手が悪い」と連呼し、精神的に参らせるわけだ。
ヤクザやパヨクがよくやっている手だから見たことあると思うが。
この場合、上記スコアを付けるのなら、0から+方向にしか振れず、意見が広がっていかない。
典型的には「対案を出せ」と対策されるケースだ。
相手は否定するばかりで、新しい知見を出さないものだから、
結局自分の意見の範囲でしか広がらず、ブレストにもならない。
韓国人死ね > 命名規則としてソースを出して反論して (>>760)
ディベートに持ち込み、どちらが優位か結論を出す気なら、
760自身が「命名規則としてソースを出して」自説を補強すれば、それで済む。
それをせず、相手に要求して連呼するのはヤクザのやり方。上記通りだ。
相手にしたところで、何も得られない。だから無視して殺さなければならない。
多分、韓国人流の精神的勝利法の一環なんだと思うが、
そもそも、匿名掲示板上で勝った負けたしても意味無いだろ。
ここでやるべきなのは、「その案件について、一番妥当だと思える意見は何か」であって、
それを「誰が言ったか」は価値がないと見なすから匿名なのであって。
だから、何であっても、「それについては俺はこう思う、理由はこうだから(自説の補強)」が匿名掲示板での基本スタイルで、
相手に対して優位に立つ為の「相手の意見を否定する」戦術は基本的に必要ない。
そしてどっちの意見が妥当かは読者が勝手に判断するだけ。
相手の意見を全部否定できたとしても、スコアは0には戻るが、+にはならない。
つまり、否定するだけだと引き分けには持ち込めるが、絶対に勝てない。
勝つ為に+にしたいのなら、自説の補強をするしかないんだよ。しない時点でアホ確定だ。
だから繰り返すが、
> 命名規則としてソースを出して反論して (>>760)
この発言だけでこいつは馬鹿だと分かる。相手をしても何も得られない。
勝ちたいのなら、勝手にソースを出して自説の信者が増えるよう努力すればいいだけの話だ。
それが妥当かどうかは読者が勝手に判断してくれる。俺が否定しようがしまいが、関係ない。
ということを念頭に置きつつ、ディベートしたい奴は気が済むまでやればいい。場数を踏めば上手くなる。
ここは匿名掲示版なんだから、基本戦術は、「俺はこう思う、理由はこう(自説の補強)」でよろしく。
他人の意見を否定しても勝てない。勝つ気なら、よりよい意見で「上書き」することを目指せ。
あんまり酷いようなら行司してやるよ。
とはいえ、今のところ「余計なお世話」になりそうなのはいいことだね。
韓国人死ね 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f) うーん、同期関数しか用意しない場合はSyncはつけるべきじゃない、と何度言ったらわかるのかな。
requireって非同期でうごくっけ?とか色々あるだろうに。 さらについでに講評しとくと、
>>777の時点で理解できないのは777がアホだから。
そこまでに十分な説明はなされているし、俺には通じてる。説明も下手ではない。
> そうすれば、ターゲットがクリックされたことを機会に、ターゲットをフリーズさせて、
> その間にドラッグするためのモジュールを読み込んでそこから再開するというようなことができる(>>773)
JavaScriptはそのように設計はされていない。
だからこれをやりたいのなら、何らかのサポートが必要なのも事実。
とはいえ、このやり方が必要かは議論になるだろう。
> だけどここまで考えてやっぱりObservableAPIが良いのかなと思い始めた (>>780)
> async世界と相性悪いねって話だよ (>>782)
はっきり言えばJavaScript含めて一般のプログラミング言語は
同期的に処理が行われる前提だからそもそも相性が悪い。
と言っても通じないだろうから簡単に説明すると、
var a = 1; // (A)
a = a + 1; // (B)
console.log(a); // (C)
とあった場合、(A)(B)(C)の順に処理されて2が出力されることを当然だと思ってるだろ?
世の中にはそうじゃない言語もある。
https://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%95%E3%83%AD%E3%83%BC%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
韓国人死ね >>782(続き)
プログラミング言語ではないが、verilogで説明すると、
assign a = b;
は b が変化するたびに再評価されて a = b が定常的には保証される。
JavaScriptで言えば
Object.observe(b, function(){ a = b;});
とほぼ同じと考えていい。
だからverilogの場合は(A)(B)(C)は独立な関数であって、実行順は規定されない。
必要なときに必要な順で評価される。この点はHaskellも同じで、例えば、
console.log(b);
assign b = a + 1;
assign a = 1;
については、JavaScriptならundefinedになるが、verilogとHaskellでは2と正しく評価される。
だからHaskellについて詳しいのなら、そっちから考えてもいいだろう。
Haskellは遅延評価でしかないが、初期値の計算方法自体はデータフロー型と似ているところがある。
君はイベントをデータフロー的に接続することを考えている。
それが効率がいいのかは俺には分からない。
ただし、一般的にverilogは難しいとされるから、その方法は流行りにくいだろう。
JavaScriptでは関数単位で非同期だが、verilogは行単位で非同期で、これについて行けない奴が多い。
JavaScriptでもそうだが、同期的に書きたがる奴はいるだろ?
結局の所、同期的に書けること自体が簡単なんだよ。そして簡単なことは重要な事なんだ。
君はJavaScriptをverilog化しようとしている。それは多分受けない。
韓国人死ね ソースも何もなぁ。
最初に自分が張ったURLから辿れるように
https://nodejs.org/en/docs/guides/blocking-vs-non-blocking
であるように
All of the I/O methods in the Node.js standard library provide asynchronous versions, which are non-blocking,
and accept callback functions. Some methods also have blocking counterparts, which have names that end with Sync.
いくつかは、Syncで終わる、対応する非同期関数の同期版があるよ(同期関数だからSyncだとは言ってない)、とか
https://github.com/nodejs/node/issues/5
で議論されてるように、とてもライトウェイトな同期関数はもういいんじゃねえの?
みたいな話に落ち着くんじゃない?
requireの名前がrequireSyncに変わったらまた声高らかに演説してくれたら良いよ。
変わらないうちは、同期関数しかない物は別にSyncで終わる必要はないと言いたいが。 >>794
verilogが常にすべて同時に動くのはそういう問題じゃないだろ。
メッセージポンプが全てって割とあるんじゃねえの?
メッセージポンプだけじゃなくてデータも一方向にしか流さないFlux的な考え方が何度めかの流行りだったんだし。 >>795
それに対する返答も、俺は既に書いている。
日本語が読めるつもりなら、俺の投稿を理解できるまで読み返し、ちゃんと自殺しろ。
韓国人死ね 最近書いたコード、ほとんどすべての行にawaitが入っててさながら「await地獄」だったわ。 繰り返すが、韓国人を殺すことを躊躇するな。
お前らにも彼らの論理の稚拙さは分かるだろ。邪魔なだけだ。
なぜJavaScriptのスレにだけゴキブリ韓国人が溜まるのかはさっぱり分からないが、
とにかくこのスレを正常化する為にはまずは汚物を消毒するしかない。
お前らの議論スキルが低すぎるから、韓国人やパヨクの詭弁に騙される。
だから俺がグダグダとお前らに議論のやり方を説明している。
冷静に見て、彼らは邪魔してるだけだ。それに気付け。そしてきちんと殺しきれ。
例えば、>>795は>>742の時点で書けるレスだ。
それを書かないのは、意図的に邪魔しようとしているか、そもそも議論の能力がないか。
区別する必要はない。どちらも殺処分でいい。邪魔なだけだ。
韓国人死ね
対して>>747は、基本的に自説の開陳&補強で突っ走ってるだろ。
匿名掲示板上の議論はこれで正しい。だからまあまあの議論になる。
>>778に関しては、自分で修正できているし、説明も議論も十分上手い。まあ要らん世話だろうがね。
今のお前らは、仮にジェンヌと同じ削能力を与えられたとしても、
誰が問題なのか分からず、スレを良くできない。
これでは良いスレは持てない。民主主義と同じで、自分たちの議論能力以上のスレは持てないのだよ。
だからお前らにはまず議論上手になってもらう必要がある。
リアルの議論はリアルタイム性がありなかなか難しいが、
ここでの議論は、何度でも読み返せるし、じっくり考えられる。この点は学習には向いている。
だからまずは議論が上手くなってくれ。そして誰が問題なのか、ちゃんと見抜けるようになってくれ。
ゴキブリ韓国人マジで死ね
邪魔するだけの奴を殺すことを躊躇する必要はない Electronでアプリを作っている者ですが
CSS Grid Layoutというものを知りました
今まではHTML5+CSS3で苦労してレイアウトしていたのですが
簡単にレイアウトできるCSS Grid Layoutというものがあり、
それはもうChromeで、つまりElectronで使えると。
今まで何してたんだろうと思わずにはいられません
JavaScripterといえどもCSS方面のキャッチアップも怠ってはいけないですね? Gridとかもう古い方だよ
JSer的にはこれからはHoudiniを勉強していこう HoudiniはローレベルAPIだからこれが早々古くなるのは考えにくい
半年後だとまだHoudiniの一部が実装中の段階だと思う HoudiniというのはCSSをJavaScriptで操作できるようにするものなのですね
Electronを使いはじめてから、ブラウザ対応を考えなくていい良さをしみじみと実感したので
ブラウザ間の差異が吸収されていく流れは歓迎です
ありがとうございました Houdiniって低レベルAPI用意してやったからお前ら自分たちで好きなライブラリ作って勝手にやれよ、という標準団体からのメッセージだから
このスレにもその内難しくてセンシティブな低レベルAPIの質問と、誰もが初めて聞くようなマイナーライブラリの質問が増えてくるんだろうな
JSは色々自由な所が多いが、どういう構文使ってどういうAPI使うかは、標準やブラウザの実装状況から判断すれば良かった
でもこれからはライブラリの作者とユーザーが考えないといけなくなりそうだね JSの世界ってそんな感じだよな
標準で提供するのは低レベルAPIです。
あとはjQueryなり好きなライブラリを作って
それを使ってください 最終的にはオレオレCSSの定義からペイント、レイアウトまでJSで行えるのがHoudiniだから
jQuery時代のラッパーライブラリとは次元が違ってくるとは思うけどな > オレオレCSSの定義からペイント、レイアウトまで
ん? それってレンダリング周りしかできないってこと?
じゃあDOM操作のjQueryとはかぶらないのか >>809
その通り
レイアウトを担当する所謂jQueryライブラリには関係があるかも知れないが、本体とは関係ない
ただ仕様群のうちTyped OMだけは幅広いユーザーやライブラリに影響もとい恩恵がある ReactとTypeScriptはHTMLに型を与えてくれた。
IDE経由で必要なプロパティが分かるのはほんとありがたい。
cssもそういう方向に進んでくれたらありがたい 値を文字列として読み書きするのが.innerHTMlのように時代遅れになる日も近いな 上で話題になってたことと関連して
今年はロックやスケジューリング機能が入ったマルチスレッドDOMの話が進みそう
今非同期を使い倒さないといけないのって、結局UIスレッドが1つでメインスクリプトはそれを妨害しないように動かないといけないからで
Houdiniと一緒にDOMもパーツ毎に別スレッドで制御できれば、ただ同期的に書けばいいだけになるよね >>813
マルチスレッドになるとかやべえ。
iOSアプリだって描画系はシングルスレッドで動かしてるし、絶対デットロックするだろ。 マルチスレッド自体はWorkerや非同期XHR、タイマーなどでもできるが
マルチスレッドDOMって何ぞ? 読んでないけど、ページを論理的に分割する方法があれば
マルチスレッドDOMは実現できるでしょ?
コンポーネントに分割して外部とやり取りする
インターフェース経由でしかアクセス出来ないようにすれば良い メニューと本文を別々にロードするようなものなら、XHRを2つ使えば可能なんだけど
マルチスレッドDOMはJSでやるものではなくブラウザの実装の問題じゃないのかな
たしかにテーブルや複雑な段組み表示で描画が待たされるけど
上部のレイアウトが決まらないと下部の描画ができないのはどうしようもない
擬似フレーム、レイヤー、サイドバーを別スレッドで描画するというのならできそうではあるけど
(ブラウザを作るのは人ごとなので、言うだけなら何とでも言える)
iframeで分割してpostMessage()するのは現行規格でもできるけどね rustを使って開発してるFirefoxの
レンダリングエンジンはマルチコアに最適化してるんだっけ
ということはマルチスレッドでDOMが動いてる?
とりあえず最終的な描画部分はマルチスレッドになったとしてもjs側はシングルスレッドのままな気がする。
そもそも描画系以外の処理はserviceWorkerとか使えばマルチスレッドぽくなるんだからそれで良くないか? レイアウトとレンダリングに関してはすでにHoudiniで定義されている
Workerはオーバーヘッドが大きいのでWorkletという
レンダリングエンジンの各作業スレッドの拡張ポイントとしてJSを動かす仕組みで行う
あとある部分のレイアウトが完全に決まっていなくてもとりあえずの値で確定させて描画ができる
画像が読み込み中の場合を考えたらいい 単にマルチスレッドで複数の要素をアニメーションさせたいだけであれば、
アニメーションさせたい要素の数だけタイマーを生成すれば可能かと
(ただしJSアニメーションはCSSアニメーションに比べて処理速度が遅い)
シングルスレッドのアニメーション(タイマーを1つ生成)
function anim_all(){
要素Aをアニメーション;
要素Bをアニメーション;
requestAnimationFrame(anim_all);
}
requestAnimationFrame(anim_all);
マルチスレッドのアニメーション(タイマーを2つ生成)
function anim_a(){
要素Aをアニメーション;
requestAnimationFrame(anim_a);
}
function anim_b(){
要素Bをアニメーション;
requestAnimationFrame(anim_b);
}
requestAnimationFrame(anim_b); ついでだから聞くんだけどxhrをworkerで動かしてるサンプルがあったんだけど
あれって普通にxhr使うより早くなんの? ファイルを取得するとこまでは殆ど関係ないけど
それを使って重い処理をWorkerでするのなら
取得もWorkerでするのが普通でしょ JavaScriptで大文字と小文字の使い分けをどうしているのかが最大の謎
たとえばJavaなら
Hoge hoge = new Hoge();
ならば、「hoge」はインスタンス、そして「Hoge」はクラス名
だと分かる。
ところが、JSの場合、
var hoge = new Hoge();
のとき「Hoge」はクラスではなくこちらも「オブジェクト」だから、
「hoge」も「オブジェクト」「Hoge」も「オブジェクト」じゃん?
だけど片方は大文字で片方は小文字だから結局「頭が大文字な変数」と
「頭が小文字な変数」の何を見分けていいかわからなくなる。
「hoge」があったときにこれがオブジェクトなのか関数なのか
プロトタイプなのかコンストラクタなのか一体何者なのかさっぱり分からん。 >>826
実体が○○だから、こうするって考え方は初心者だよ
どうしたいのか、どういう意図を込めたいのか、その考えをコードに反映させる。
と言っても意味がわからないだろうな。
古いGoogleのコーディング規約だがその一節にこういうものが有る
http://cou929.nu/data/google_javascript_style_guide/#constant-values
> 一定で不変であることを意図した値には CONSTANT_VALUE_CASE のように定数としての名前をつけます.
> 加えて, すべてを大文字にし単語をアンダースコアで区切るようにすることは
> @const (その値は overwrite できない) という意味にもなります..
これが書かれた当時はconstというものはなく、実体は只の変数にすぎない。
只の変数に「定数である」という意図を込めるために、全部大文字にするわけだ
Hogeも同じ。実体が関数かオブジェクトかってのは関係ない。
例え実体は関数やオブジェクトであっても、それ(Hoge)にクラスだよという
意図を込めるために大文字で始める。
ならばそれを見た人は、Hogeをクラス名だと考えるようにしないといけない
(もちろんコーディング規約次第だが)
Hogeをどのように作り出すかは関係なく、大文字で始まっているのだからそれはクラス
逆に言えば、クラスとして見せたいから大文字で始める。そういう意図を込めるわけだよ。
コードっていうのは自分の考えを反映させて書くもの。
コードがどうなっているかではなく、自分がどうしたいか。
そして読むときは書いた人の意図を読み取れるようなろう。
実体が何かで考えているうちはまだまだ初心者
> 「hoge」があったときにこれがオブジェクトなのか関数なのか
一般的にはhogeが名詞ならオブジェクト。動詞なら関数。 馬鹿は答えるな。node.jsのwsモジュールでws.oncloseに関数を代入するやりかたと
ws.on('close',callback)を使うやりかたのなにが違うのか分かりません。
教えてください。 CSSエンジンをJavaScriptで組んだものってありますか? CSSエンジンってなんや?
どこからどこまでをさすんや? HTMLとCSSをレンダリングするようなやつです
floatのアルゴリズムを知りたいのです SPAを作る時にページが存在しない場合にをどうやって404を返せばいいんでしょうか?
現状
https://support.google.com/webmasters/answer/181708?hl=ja
に示すみたいにソフト404エラーみたいになってるんですが
SPAでステータスコードを返す方法がよくわからないんです。 >>835
つまり404は普通にwebPageとして作ってリダイレクトしろよと。 それは現実的じゃないと思うな
直リンクとSPAでの遷移が違うと不自然だし
SPAでの遷移で存在しない場合リダイレクトするのも不自然だし
今だとServiceWorkerとかもあるし ソフト404でいいと思うけどな。googleが悪い。 >>834
一応JavascriptスレだからNode.jsで答えるけど
res.status(404);
res.send('File Not Found');
でいいのでは SPAとしての決まりはあんまりない感じなんですかね?stackoverflowを見るとgoogleがリダイレクトで404で飛ばすようにサービス作ってるからそれでいいのでは?という話でした。 SPAっていうのもピンきりだから
mobile jQueryを使ったりしてただ単にリクエスト量削減のオマケなら404を返せばいいし、
アプリケーションと呼ぶようなものならそうしなければいい >>842
Googleの場合色んな検索窓があるページがSPAだけど、
考え方によっちゃヒットの無いキーワードでの検索っていうのは
404に当たるものだけど返してないよね
逆にそういう1つのアプリケーション内で
404にリダイレクトせざるを得ない事なんて考えにくいよね 検索結果が0件であることと、検索結果ページが存在しないことは別物 >>844
> 考え方によっちゃヒットの無いキーワードでの検索っていうのは
> 404に当たるものだけど返してないよね
ないわ〜 >>846
何言ってんだ?
商品ページがない場合は404だろ >>848
言いなおそう
検索結果が0件であることと、検索結果を表示するためのページが存在しないことと、
検索結果を表示するためのページからリンクをたどった先のページが存在しないことは別物 んで、質問内容は、リンクを辿った先のページがない時に
404を返すにはどうするかって話だろ いつ404を返すべきかはさておき
返し方はとりあえず >>841 に書いた
静的ファイルならApacheやnginxが勝手に返してくれるし
PHPやほかの言語ならそれぞれの言語のスレに行ってくれ >>851
> 返し方はとりあえず >>841 に書いた
吹いたw SPA、おい、S・P・Aだ
nodeはサーバーサイド側での返し方だろ
お前SPAしらんだろ? SPAなんだからクライアントJavaScriptの話で
PHPや他の言語は関係ないし、静的ファイルでもない
SPAで構成されたすべてのURLが一つのHTMLが呼び出される状況で
すべてのURLに含まれてしまう存在しないURL に対して
どうやってクライアントJavaScriptで404を返すのかって話だろうが
ついてこれてないぞw 404に独立したページが存在したらそれってSPAじゃなくない? 独立したページ?それは曖昧な言い方だな
SPAっていうのは、一つのページ(HTML+JavaScript)が
複数のURLを持っているものなんだよ。
もちろん一つのURLだけを持つのもありだが、
それだとSEO的にあまり良くないからな
一見複数のページが有るように見えても実際は
一つのページになってるように作るのがSPAだ > 複数のURLを持っているものなんだよ。
持ってないよ。複数のURLどれでも同じページ返してjsでパスに応じて内容切り替えてるだけだよ。 > 複数のURLどれでも〜内容切り替えてるだけだよ。
それ複数のURL持ってますねwww で、話を戻すと
複数のURLどれでも同じページを返す・・・
ということは
複数のURL(存在しないページ含む)のどれでも同じページを返す
から単純にやったら404にはならないということ
URL直接入力だったらサーバーが介在する余地があるからまだどうにかなるが、
存在しないページに対してSPAからアクセスした時に
そのページ(URL)をどうやって404にするのか?という話がでてくる >>849
別もんじゃないよ
動的なアプリケーションの場合
所在地としてのURLとコンテンツの在り処には最早関係がない
逆に別にx.cgiが存在してもそれに対するクエリがコンテンツ検索のためのものなら
場合に応じてcgiが404を返したって問題ないんだから
Googleの挙動だって最初期の論文や日記くらいしかなかったWebではありえないことなのよ
今や重要なのは定義でなくどう使われてるかの意図 ひとまず
https://stackoverflow.com/questions/37334220/how-do-i-return-a-http-404-status-code-from-a-spa
上記リンクの情報に従うと
404 page にリダイレクトさせることでステータスコードを返すって方法しかない
ということでいいでしょうか?
js側でステータスコードを返したようにブラウザに認識させる方法とか
あるのかなーと期待していたんですが、、、 俺としてはまあ答はでてるんだが
ほかの人、もう少し頑張ってみてくれw どうせSEOのために仕方なくでしょ。
ソフト404でいいと思うんだがSPA推してるくせにgoogleマジなにやってんの。 サーバー側のCGIが404を返すことは何の問題もない
PATH_INFOで動作しているCGIは404や300番台も返すことがある
例えば、 ttps://www.amazon.co.jp/dp/abcdefg
ブラウザ内部では200と404を区別してるだろうけど、見た目には200と404の違いはない
404を返す方法じゃなくて、返ってきた404コードをどのように扱うかは
SPAに限ったことではなく、Ajax全般に言えることだが
フレームワークはフレームワークにその書き方が用意されてなかったらどうにもならんだろ
生のJavascriptの場合
if( xhr.status === 200 ){
}else if( xhr.status === 404 ){
//たとえばalert()して終わり
//responseTextやあらかじめ用意しておいたエラーページを表示してpushState()
//locationでそのURLに移動する
}
自分はlocationで移動する方法はあまりいい方法とは思えんけどな SPAでも、ルーターで判定するだけじゃないの?
俺はそうしてるけど。
SPAなんだから、誰がどうその404と言う情報が欲しいかというと、多分エンドユーザだよ。
となると、ごく当たり前のように404に相当するコンポーネントを出すしか出来ないだろ。
それが正しく404として扱われてるか、はGoogle Search Consoleで確か確認できる。
むしろ404として扱われていないかを確認するためにも、Search Consoleは見るべきかと。 >>864 に書いた
> //たとえばalert()して終わり
> //responseTextやあらかじめ用意しておいたエラーページを表示してpushState()
> //locationでそのURLに移動する
この部分の書き方にどんな種類があるのかを知りたいのではなく、
サーバーは404を返したけど、クライアント(フレームワーク・ルーター)が反応しないということであれば
フレームワーク・ルーターには
if( xhr.status === 200 ){
}
これしか書かれてないわけだから、
あきらめて200で処理する(いわゆるソフト404)か、フレームワーク・ルーターを作り直せという返事になる >>864
返ってきたコードをどう扱うかは自由だが
locationで移動しない場合、検索エンジンなどに404を伝えるにはどうするんだよ >>866
サーバが返すも何も、SPAで、fetchのレスポンスがなんて話なら、そりゃアプリケーション内部の話であってユーザには全く関係が無いかと。
そんな台所事情でエラーメッセージを出すのは404でもなんでもなく、デスクトップアプリで予期できるexceptionを吐いたときにexceptionをそのまま出力しちゃうぐらい悪手では?
かつ、少なくとも、その場合はサーバ側のロジックも結果なしという結果、にすべきなんじゃないかな。
本当にそのリソース(API)がデグレなりクライアントのキャッシュなりでバージョン不一致なりの理由で存在しない場合との切り分けが難しくなる。
RESTのAPIだから、なんて場合は404を返したいのはわかるんだけど、危険な原理主義ではないかなぁ。 >>867
HTTPヘッダの404を見て404で登録される
https://support.google.com/webmasters/answer/35120?hl=ja
URLエラーのタイプ、一般的なURLエラーのソフト404の説明書きを参考
ただ、フレームワークが200しかサポートしていない、にもかかわらず404で処理したい
というのであれば、まあ、locationしかないんじゃないかなと思うんだけど
検索エンジンに、SPAのURLとlocationでジャンプしたURLが同一だということを理解できるのかなぁ
>>868
ブログにニュース記事へのリンクを張った後に、
ニュース記事を削除した場合に404を返すようにしている
Google SEO的には410のほうがいいかもしれないけど
ページを追加、削除し、そこにリンクを張った過去のブログを更新しないことなんかはよくあることだし、制作時に対応できない
検索結果0件(コンテンツのない、またはSEOの重要度が非常に低いURLが存在する)のと、
URLそのものが存在しないのとは区別すべきというのが自分の考え方だから どんなURLでも同じページをサーバーが返して
そのページがデータをフェッチして表示するようなもので
クローラからのアクセスの時のみ404レスポンスを返すのはありなのか?
Googleは特別扱いするなとか言いつつ、クローラを考慮した仕様も出してるから
どうしたらいいのか難しい つまり検索エンジンに載せたくないという理由で
実際ページが表示できるかに関わらず404を返していいのかということ
SPA用のスマートな方法は用意されているのだろうか >>869
自分が言いたいのはURLを動的に解釈している場合は多かれ少なかれ
URLはコンテンツの静的な住所という大原則からは外れてしまっているということ
つまり「URLそのものが存在しない」という判定が自明でなくなる さて、むそろそろ俺の登場かな?
この問題はねSPAだからといってパフォーマンスさげないよね?
無駄なことはしないよね?という話で解決するんだよ。
例えば、http://example.com/foo/1 とかにアクセスした時、
index.html に30x のリダイレクトしたりはしない
なぜかって? リダイレクトしたらパフォーマンス落ちるでしょ?
つまりね。PATH_INFO(でいいかな?)の情報を持った状態で
サーバーサイドアプリが呼び出されるんだよ
そこでサーバーサイド側の仕組みを使って404を返せばいい
SPAの話なのに何を言ってるのと思うかもしれないけど、
ちゃんとしたSPAっていうのはF5を押しても同じ画面が表示されるし
URLも http://example.com/foo/1 のままになるもの
SPAは/foo/1のデータをAjaxで読み込むものだと思ってるかもしれないけど、
それは他のページから辿った場合で、直接 http://example.com/foo/1 に
アクセスした場合は、JavaScriptで取ってくるそのデータを最初からHTMLに埋め込むものなんだよ。
なぜかって? ページアクセスして表示されてからデータを取りに行くとパフォーマンスさがるだろ?
だからSPAは基本Ajaxでデータを取るのは間違ってないんだけど、最初のページに限っては
最初からHTMLに埋め込んでおく。埋め込むことができるってことは、
データが見つからない時に404を返すことも容易
そして検索エンジンとかは、基本的にAjaxを使ってデータを読んだりしない。
読むことも有るかもしれないけど、Ajaxリクエスト(Content-Type: application/json)として
そのページを読み込むことはないだろう。だからいま問題にしているどうやって404を返すか?という
話は実は当てはまらない。検索エンジンは http://example.com/foo/1 を直接読み込むのだから
Ajaxによるリクエスト、つまり別ページを読み込んでからSPAの処理としてページを読み込む場合は
そのリクエストを404にすればよい。たしかにページ自体は404にはならないんだけどね。
でも検索エンジンには関係ない話 >>873
今現在はサーバサイドレンダリングは不要で、GoogleBotはちゃんとjsを解釈してくれます。
但しchrome41相当なんでES2015はダメでES5にトランスパイル必須ですが。 > GoogleBotはちゃんとjsを解釈してくれます。
なにを解釈しているかちゃんと分かってますか?
解釈していると主張しているだけで、何をどう解釈しているかは
非公開のはずですが? どうして問題ないと信じられるのでしょうか? >>875
https://qiita.com/m0a/items/89aec890f98a599846ce
GoogleBotのchrome version調べることができます。
bot用にカスタマイズしている可能性はあるので確かに100%保証というわけではないですが >>876
それで今はサーバーサイドレンダリングの話なんですか?
404にサーバーサイドレンダリングなんか関係ないでしょ >>877
>SPAは/foo/1のデータをAjaxで読み込むものだと思ってるかもしれないけど、
>それは他のページから辿った場合で、直接 http://example.com/foo/1 に
>アクセスした場合は、JavaScriptで取ってくるそのデータを最初からHTMLに埋め込むものなんだよ。
>なぜかって? ページアクセスして表示されてからデータを取りに行くとパフォーマンスさがるだろ?
>だからSPAは基本Ajaxでデータを取るのは間違ってないんだけど、最初のページに限っては
>最初からHTMLに埋め込んでおく。埋め込むことができるってことは、
>データが見つからない時に404を返すことも容易
ここに対するツッコミをしただけですよ。 >>873
それはSSRする場合というごく少数のSPAの場合であって、
大体はpathinfo効かせて、htmlにリダイレクトさせると思うんだが。
悪手よ。二種類のルーターの同時保守は。
hoge/foo/1は、hogeへの/foo/1というルートのパラメータであって、パスじゃない。pathinfoの時もね。
ajaxでURLとしてのfoo/1を取得するかどうかも、SPA次第であって、実はそんなこと関係なくクライアントサイドの処理で済むものなのかもしれない。
なので、404というステータスはhtmlに対してはユーザが見れうるが、各パスに対しては見ようがない。
SPAのAはApplicationのAだからね。 >>878
突っ込みになってないよ?
パフォーマンスの点から、最初から表示に必要なデータを
HTMLに埋め込むって言ってるんだから pathinfo?
pathnameのこと?
ApplicationのAだから?
railsやexpressやspringでサーバーサイドで作ったものはApplicationではない??? >>879
> 悪手よ。二種類のルーターの同時保守は。
そんなもんする必要が無いだろ?
http://example.com/foo/1 にアクセスしたら
どうせクライアントサイドから /api/foo/1とか呼び出すんだろ?
ならその呼び出す命令の代わりに、
サーバーサイド側で http://example.com/foo/1 でアクセスした時に
同じ /api/foo/1 を呼び出せばいいだけ
汎用化できるから保守の必要はない /api/foo/1と書いたけど、もちろん /foo/1 でもよい。
その場合、Ajax(Content-Type: application/json)からのリクエストか
どうか判別してそのページのデータのみを返すか、
HTMLを返すか切り分ければいい そもそもGETはキャッシュラブルだとかそういうのも守れてないし しないならしなければいいだけだろ?
何を言いたいのか分からん >>887
だから、>>882の通りにはいかないでしょ。
リクエストのURIと同じURIのリソースを呼び出すこともあれば呼び出さないこともあるSPAだと。
アプリケーションのなかで一意なURIと、Webサーバとして配信してるURIは混同するほうがおかしい話で。
クライアントサイドだけが生成するものの404は、クライアントサイドだけでさばくべきかと。
クライアントサイドだけが生成するものってのは、サーバに持ち込まない事がセキュリティ上の担保になるようなブラウザで生成するものになるだろうけど。 >>888
> リクエストのURIと同じURIのリソースを呼び出すこともあれば呼び出さないこともあるSPAだと。
それはページ内部の話だろ。クローラーからすりゃ関係ない話
クローラーが記録するのはブラウザのアドレスバーに表示される
あのURLのみと考えればいい。そのURLに対してGETリクエストを行うだけ
そもそもお前、SPAの初期ページの読み込みが遅いって問題と解決方法知ってるか?
https://qiita.com/takeshy/items/b7e1b6bd30d12ecb02c6
> 1.データを別々にAjaxで取得
> 各CollectionやModelがRESTを使ってデータをAjaxで取得するので、
> リクエスト数が多くて遅くなる上に、ブラウザの同じサイトに対しての同時リクエスト数制限にひっかかります。
> 1.に関しては、初期画面のHTMLにAjaxで取得予定のデータを予め埋め込んでしまい、
> 初期データとして使うことで初期画面表示時のAjax呼び出しをなくしました。
https://qiita.com/takeshy/items/ba8b3ee4606993c1c5b8
> 初期表示時にサーバとの通信を極力行わない
> SPAで作成する場合、各モデルごとにサーバとデータを同期する必要がありますが、
> データを初期のHTMLにJSONデータとして埋め込んでしまうことで、Ajax通信を回避することが可能です。
どうせこれやるんだから、この時にデータが見つからなければ404を返すだけの話だろ >>888
> クライアントサイドだけが生成するものの404は、クライアントサイドだけでさばくべきかと。
> クライアントサイドだけが生成するものってのは、サーバに持ち込まない事がセキュリティ上の担保になるようなブラウザで生成するものになるだろうけど。
クライアントサイドだけが生成されるものというのはURLを持たないってことか?
URLを持たないページならクローラーの対象とならないんだから
そんなのどうでもいいだろ。URLがなb「ならクローラ=[はこねーよw
まさかURLを持たなくてもクロールしてくれるとか思ってねーよな?
クローラーがクリックイベントまでシミュレートして、URLは変わらないのに
ページ辿ってくれるとか思ってねーよな?しねーからなそんなこと
> https://www.bricoleur.co.jp/blog/archives/2628
> 原文:
> We don’t “click” during rendering so any click event will be ignored,
> but we do execute JavaScript that is triggered by for example onLoad events.
> > 原文:
> (Googlebotは)ページをレンダリングする際に何も「クリック」しない。
> 従って、クリックイベント(によって発生する動的なコンテンツ)は無視する。
> しかし、onLoadイベントなどがトリガーとなるようなJavaScriptについては実行する。
クローラーの動きとしては
1. ページを読み込んでレンダリングする
2. そのページのURLをかき集める
3. そのページは一旦閉じSPAが終了されてるのと同じ状態から、かき集めたURLの一つを読み込む
だからな。SPAアプリをクローラーが操作してくれるわけじゃない。
SPAの画面をそのままクロールしてくれるんじゃなくて、その状態からF5(画面更新)を
押して表示されたものしか見てくれないからな。だからURLがあることは必須 >>891
React-router-dom触ってると
onclickで遷移する仕組みがチュートリアルで紹介されてないんだよね。
(よく探すとあるけど。)
GoogleBotが辿ってくれるためにはAnchorである必要があるってことで
そのためにonClickじゃなくてLinkタグを使って遷移処理するようにするってことだね。
非同期通信を介してレンダリングすると一々Stateに保存してLinkタグを書くのがシンドいと思ってたんだけどSEOのためだったんだなぁ なってるといいよねw
どちらにしろURLがないコンテンツは
クロールしてくれないことに変わりないんだがな >>892
リンクタグを使った所で、そのリンクを
アドレスバーに入れて表示されないと意味ないからね
クローラーはリンクのみを取り出してアドレスバーに入れて
表示されたものを、そのURLのコンテンツとして認識する
そこからクリックして変化したものまでクロールしてくれない
(普通に考えれば当たり前だが) クリックじゃなく遅延して表示してるのはどうなるんだろ?何秒か適当にwaitしてから取ってんのかな?それとも >>895
運次第だろ?
1秒毎に変わるページでも作って、それがクロールされるかとか
やってみたら?少なくとも全部クロールされることはないだろうね
クリックされると副作用が現れるということで、
ページ上にクリックできるものが複数あって、
じゃあどれをクリックしたものをクロールされるのか?とかさ
考えてみれば不可能だってわかると思うんだが
クローラーがJavaScriptを実行するというのは
JavaScriptで動的に出したもの全てをクロールして
くれるわけじゃないことはわかるでしょ?
クロールされるのは指定したURLを表示して(JavaScriptで)
レンダリングした最初の画面ぐらいに思っておいたほうが良いよ
そこからのonclickは動かないとみなした方がいい
もちろんレンダリングした結果に含まれるリンクにはURLが書いてあるので
新たなクロール対象になる。
onclickの場合はURLが書いてないのでクロール対象にならない onclickにlocation.href='hoge/fuga.html'とか書いてあったらどうなんの? とりあえず、404って書いた画面表示しときゃいいだろ。
それで不満だって言うのなら何が気に入らないのかちゃんと挙げて議論。 >>898
あるURLに対してクローラーがアクセスしてくる場合には
サーバーサイド側で404を表示できる。
なぜならサーバーサイド側でそのリクエストを処理するから
その時にデータがなければ404を返せる
Ajaxを使ってアクセスする場合は、そのリクエストで404を返せばいい 何を怒り狂ってるかわからんが、クローラがちゃんとクロールしてるかどうかの調べ方は書いただろう。
>>889
ページ内部の話だから、むしろ関係ないんだよ。
SPAなんだから。
ウェブページ豪華版みたいな扱いされても困るわ。
SPAが重いって問題とは別問題。
>>890
URLじゃなくてURIとしては持つだろうね。
持つって言ってるでしょ。
それはユーザにとっての識別子であって、クローラに対してどうするかは、クローラがクライアントとなってどうするかによる。
その調べ方は書いた。
なんか大きめの勘違いしてない?
SPAはwebページとは限らないよ。 ajaxを使って、同じURIから同じリソースを使うなら、クライアントで描画する必要無いよね。
そのURIの情報をDOMごと貰えばいい話になる。
どこのClassicASPのUpdatePanelの話なのかわからんレベルで無能じゃん。
アプリケーションだよ。 > ajaxを使って、同じURIから同じリソースを使うなら、クライアントで描画する必要無いよね。
あ、なるほどwwwww
そううかお前、サーバーサイドでレンダリングするって思っちゃってるんだwwww
SPA初心者だな。
クライアントでレンダリングするのに必要なデータをJSONでHTMLで埋め込むんだよ
そしてクライアントサイドでレンダリングするんだよ。
>>889のリンク先にもそう書いてあんだろ
で、クライアントでレンダリングするためのデータがなかったら、
404を返すだけの話だよ。 >>901
> SPAはwebページとは限らないよ。
え?なに? お前のSPAはF5押したら
初期画面に戻っちゃうの?
使いづれぇなぁw F5押しても戻らないよ。
ルーターが処理してるから。
お前アホなんだろ。 そもそも、pathinfo使ってリダイレクトさせるのは別に動的なphpやサーブレットなんかだけが対象じゃなくて、htmlでも良いんだよ。
そのhtmlはサーバから取らなくてもサービスワーカーなりなんなりでブラウザ内で処理しちゃえるから、トラフィックは発生しない。
ブラウザ内でindexedDBなり使って復帰すればそれでいいんだから、同じURIにリクエスト投げる必要もなく、ブラウザ外に問い合わせて表示データを取る必要もない。
アプリケーションなの。APIが返す値を表示するだけのブラウザじゃないのよ。SPAと言うのは。 >>905
F5押しても戻らないってことはURLがあるってことじゃねーかw >>907
URIはあるけど、それがサーバのURLと一致してるわけじゃないよ。
理解してなくない? F5で完全に戻らないとしてもURLだけで
そのアプリケーションの全ての値が復元できるとも限らない それはURIだけで、サーバがすべての値を返すとは限らない、と同じ意味だよね。 クローラーはURIだけでアクセスしてくるので
URIから読み取れないデータはクロールされません。
またGoogleの検索結果にSPAのJSONが
クロールされた形跡は見られませんね。
もしそのJSONがクロールされていれば
検索結果に出るはずですから その理屈は正しくない
もしJSONも認識できて人並みの知能があった場合
それを検索結果に出さないという判断をすべきだから SPAのJSONという時点でダム端みたいな使い方しかして無いとわかってしまう悲しさがあるな。
ブラウザは単なるレイアウトエンジンじゃないぞw
うちのログにはSPAだけがルーティングしてるアドレスに向かってのクエリはあるから、逆にajaxしてるからクローラにそこで諦められてんじゃないの? よくよくこいつがなんで馬鹿な事言ってるか考えてみたんだが、URIだけでアクセスしてくるが、その与えられたURIだけでルータが割り振ったあとコントロールのJS内で画面と内容をレンダリングできてしまうがある事を想定してないんだろうな。
URIで指定されたコードをバーコードとして画面に表示するとか色々作ったが、そう言うのは多分想定外なのかなと思ったわ。
HTTPとしてGETするリソースと、ブラウザにあるコンテンツを求めるために示されるURIはイコールじゃない。
だからHTTPサーバはindex.html/jsに相当する内容をいつでも同じように返すし、サービスワーカーが動いてればそのサーバへの問い合わせすらしない。
いつでも、そのhtmlやjsが、自身に与えられたURIから、コンテンツを作る。 >>901
この文脈であえてURLとURIを区別する意味が分からん。 >>915
いや、そうじゃなくて
「その与えられたURIだけでルータが割り振ったあとコントロールのJS内で画面と内容をレンダリング」
という処理をするためには、
1. URIからサーバーにリクエストを投げる
2. サーバーからindex.html/js相当を貰う
3. クライアントのJSでURIから画面と内容を表示するのデータを貰うためにサーバーにリクエストを投げる
4. サーバーから画面と内容を表示するためのデータを貰う
5. そのデータを使って画面と内容をレンダリングする
の3〜4のサーバーへのリクエストの処理について考察できてないんでしょ?
そしてSPAでは2回サーバーにリクエストを投げるのが当たり前で解決できない問題だと思い込んじゃってる。
まともなSPAだとここを1回にする。理由は2回リクエストを投げるとパフォーマンスが落ちるから。
2回サーバーにリクエストを投げる方法だと2の時点で200が返ってきてしまい、4の時点で404を返すことになるが、
リクエストを1回にした場合は、2の段階でindex.html/js相当+画面と内容を表示するためのデータを貰うことになるので
この時点で404を返すことができる。 >>917
違うよ。3は、必ずしも存在しないって言ってるの。
SPAでは2回リクエストを送ることもあるだろうし、リクエストを送らない事もあるって言ってるの。
まともなアプリケーションでは、一回も送らなくて済むならば送らない。
htmlやjsをサービスワーカーでキャッシュしてれば、そもそももっと話が変わってくる。
(特定のURI以下へのリクエストをサービスワーカーでキャッシュから解決するだけ)
さらに、URIの中身で画面が作れる場合、アプリケーションから見てそれは本当に唯一無二のURIだよ。Locatorではなく、Identifier。
お前は、最低一回リクエストするはずだ、という思い込みというか、それ以外の方法を知らないんだと思うよ。
要はウェブページプラスαの考え方。 >>918
今、話をしてるのはクローラーの話だって分かってない?
クローラーはクッキーやローカルストレージは使わない
https://www.suzukikenichi.com/blog/googlebot-uses-a-web-rendering-service-that-is-based-on-chrome-41/
ページレンダリング中に一時的に使ってるかもしれないが読み込み時に毎回クリアされる
クローラーっていうのは、HTMLを取得(ページをレンダリング)する処理と、URLをかき集める処理が別れている
そしてクローラーは自分が知ってるURLに対してGETリクエストを送る
だから一回もリクエストを送らないということはありえないんだよ。
クローラーはブラウザじゃない。ブラウザのように前の状態というのを持たない。
だからアプリの作りが例えサーバーと通信しない作りであっても
知ってるURLに対して初回アクセスと同じようにかならずGETリクエストを送ってくる
そしてクッキーやローカルストレージは持たない
クローラーは必ずSPAのアプリケーションの特定のURLに対して直接GETでアクセスしてきており
(アクセスしない = 最新の情報がわからないのだからクロールされてるページ内容の更新を行わない)
なおかつ初回アクセスと同じようにデータは空なのだから、状態は200か404のどちらかに決定することが可能
(まあ他にもリダイレクトとかあるだろうけどいずれにしろどれかに決定できる)
クローラーがブラウザと同じようにクライアントサイドだけでアプリを動かしているかもしれないじゃないか
とか頓珍漢なこと言うなよ? それなにもクロールしてないからw クローラーの使命を果たしていない それって今のGoogle Botの話でしょ?
クローラが一般的にそうである必要はないよ
Google Botも重要なサイトでは高機能長時間のクロールをしてるって噂もあるし クソみたいな長文で自分の理解が及んでませんでしたって言い訳されても困るわ。
それも織り込んで話してる。 >>920
長時間クロールっていうのはたくさんのページを
まとめてクロールしてるってだけ。動きは変わらない。
> クローラが一般的にそうである必要はないよ
個人的にしか使わないクローラーは別として
一般的なクローラーは、不特定の人が見るわけだから
このような動きになる。 要はURIだけで画面が作れる画面ってのはあるんだよ。
URIがデータの時な。
クライアントサイドだけで(JSで処理される)リンクをたどる、のはやってくれてるよ。
リファラ見るとわかる。
そのサーバではindex.htmlと同じ内容を返してる、JSでレンダリングされた内容しか含まないURLもちゃんと検索結果に上がってくるんだよなぁ。
ajax!json!ブラウザに上のURLと同じURLでAPIがjsonを返すんだ!と狂って叫ぶ前に、ちゃんと理解すれば良いのに。
ブラウザ上のURLと同じURLで実はJSONを返してる、とか、逆にクローラは無視しにかかるだろ。
クローラはブラウザセッション、状態をすべて忘れてそのURLをレンダリングするんだぞ。
SPAなんにもわかってねえな。 >>921
SEOの話とは違うね。
ページが見つからない時、どうやって404を返すべきかどうかの話
SPAがどうたらとか、サーバーにアクセスしないときがどうとか
言っているが、それらは全く関係ないってことを言ってる。
普通にサーバーにアクセスされた時にデータがなければ404を返せばいい
どんなページもURIを持っていればサーバーにアクセスされうる
(その典型的な例がクローラーってだけの話)
サーバーにアクセスしないときは〜なんて考える必要はない。
そもそもアクセスされないなら何も出しようがないだろ? >>925
> 要はURIだけで画面が作れる画面ってのはあるんだよ。
> URIがデータの時な。
URIがデータだったとしても、(そもそも全てのURIがそうなんだがw)
話は関係ない。
URIを持っていればサーバーにアクセスされうる
SPAの場合にサーバーにアクセスしない場合もあるってだけで
ブラウザでF5を押したりクローラーからアクセスされる。
だから必ずしも作る必要はないが、ちゃんと作るならば
サーバー側の処理は必要。その時にデータがなければ404を返せばいい
(URIの情報しか使わないというのならそれは200だろうけどな)
> クローラはブラウザセッション、状態をすべて忘れてそのURLをレンダリングするんだぞ。
> SPAなんにもわかってねえな。
そもそもレンダリングする前に、クローラーはSPAであることもわすれて
URIに対してサーバーにアクセスする。ここでSPAのことを考えること自体が意味ないんだよ
ちゃんと作るならば、サーバーにアクセスされた時に必要なデータがなければ404を返せばいいだけ
データの有無の話でAjaxによるアクセスかどうかとかの違いも考える必要はない。
どんな内容を返すか?のために考えるのであって、データがないときは404 >>927
だから、サーバにアクセスされても、indexと同じものを返すよ。サーバからのリソースは。
F5を押されたって同じだ。
そのURIにデータがあるか無いかは、クライアント次第なんだから、サーバが返すのは不可能。
もちろんデータのうち、ユーザが作るようなもの、クローラがそもそも「生成しようがない」ものは拾えなくて当然というか、
クローラには一生生成できないURIで表現されるので、検索結果には上がらんし、そういうデータの一覧画面は空として上がるだろう。上がらないようにしたけど。
ただ、アプリケーションだけがハンドリングする静的なコンテンツ、はクローラが拾う。
それはサーバリソースと全く関係なく、jsにバンドルした内容から描画してる画面なんかも含まれるわな。
OSSのライセンス一覧とロゴのaboutなんかとか、特定のコンポーネントだったり、色々あるだろうが。
お前が言ってるSPAはアプリケーションと言うより、ブラウザのレンダリング力を借りたダム端なんだろう。
ダム端知らないなら早めに言ってね。言い換えるから。 >>925
> そのサーバではindex.htmlと同じ内容を返してる、JSでレンダリングされた内容しか含まないURLもちゃんと検索結果に上がってくるんだよなぁ。
そういう話はしてないんだなぁw
SPAでページがない時に404を返したい。どうすればいいか。という話
答は、今までと何も変わらない。
サーバーにアクセスした時にページを表示するために
必要なデータがなければ404を返せばいい
反論としてSPAだとサーバーにアクセスされない場合が〜とかいうから
どのページでもURIを持っていれば、サーバーにアクセスされる可能性があります。
特にクローラーは必ずサーバーにアクセスしてきます。
その時に404を返せば良いのです。という話 >>928
お前、前提がおかしいぞ?
今は、サーバーにデータが無い場合に404を返すにはどうするかの話だ
そもそもHTTPステータスはサーバーが返すもの。サーバーでしか判断できない
ダム端も全く関係ない話。クライアントの端末がなにであるかとか
クライアントがブラウザとかクローラーとか、SPAか否かとか
そういったクライアントは完全に無視できる話なんだよ。
お前が言いたいのはクライアントが○○の場合には〜と
全部クライアントの話ししかしてね〜じゃんか
クライアントは関係ないんだよ。忘れていい。 クライアントが関係ないっていうのはクローラーの例を使っても説明できる。
つまり、あなたのクライアントと、私(クローラー)のクライアントはデータを共有していません。
あなたのクライアントでは何かデータが表示されるんでしょうが、
私(クローラー)のクライアントはあなたのデータなんか知りません。
あなたのクライアントでSPAが動いていようが
私(クローラー)のクライアントでは動いていません
ってことなんだよ クローラーが高度なレンダリング機能を備えているから
JavaScriptが動くっていうのも、クライアントの話なんで関係ない
単にレンダリングするってだけ
ここでSPAが〜とか言ってくるやつは、
レンダリングされる=SPAとしてクローラーが動くって
考えちゃってるんだろうなって思う。
もう少し具体的にいうと
クローラーが、Aというページを読み込んで表示されたBというリンクをクリックして
(History APIでURIが変わった時に)A+Bとなった情報を保存する
と思い込んじゃってるんでしょう?
そういうクローラーを作ることは可能だが、そんなことはしない。
なぜなら、Bというリンクをクリックした時にサーバーにアクセスしないかもしれないから
それを許すとクローラーのマシンの中だけで無限にアドレスが作れる。
しかもそのアドレスは他人がアクセスできるとは限らない。
クローラーというクライアントが生成したクローラー専用のURIになる。
実際の動きはこう
クローラーが、Aというページを読み込んで表示されたBというリンクを巡回するURIとして記録する
別のタイミングでHistoryAPIなんか使わずにBというURIでサーバーにアクセスして表示されたものを保存する
で、ここで重要なのは クローラーの "例から" 分かる通り URIを持つならばサーバーにアクセスする可能性がある
サーバーにアクセスされた時に404を返せば良いんだよっていう話をしている。 >>929
だから、結論を言うと、SPAで404にあたる場合に、表示するかなんてサーバが関与する事ではない。
ルータの二重管理にもなる。
だから、SPAでソフト404を出すしかない。
って言ってるんだが。 >>931
>>932
その「単にレンダリングするだけ」がダム端そのものだと言っとるんだよ。
お前は2010年あたりから進化してないのかよ。
あと、クローラのクライアントでもレンダリングされてるよ。
確認してこいよw >>933
だからSPAなんて忘れろってw
SPAを使おうが使うまいが、サーバーにアクセスされる時に
データがなければ、サーバーが404を返せばいいだけだって言ってる。
URIを直接ブラウザで開くならば、そのタイミングで404を返せばいいし、
History APIでURIを変えただけならば、その時にAjaxでリクエストあればそのタイミングで404を返せばいい
(その時にAjaxでリクエストがなければそもそも404を変えしようがない)
404をどう返すかの話をしていて、404をどう表示するかの話はしてないんだよ。 サーバは、API以外同じコンテンツをどのURLでも吐くもんだろ。SSR無しのSPAなら。
だから頭おかしい発想になってるんだと思うが。
404である、とか、一旦Webページの発想から離れられないもんか、
Dreamweaverでシコシコ画面作ってる「ウェブ屋」でもあるまいし。 >>934
> その「単にレンダリングするだけ」がダム端そのものだと言っとるんだよ。
https://www.nttpc.co.jp/yougo/%E3%83%80%E3%83%A0%E7%AB%AF%E6%9C%AB.html
> つまりダム端末は、自分で計算したりデータを保存したり出来ない“頭の悪い端末”という意味で、
>英語では dumb-terminal(ダム・ターミナル)という。それを日本語化して
>「ダム端末」、略して「ダム端」と呼ぶことも多い。
レンダリングする頭があればダム端にはならんが?w >>936
なんで忘れなければいけないんだ…?
>>834
が発端だろ。
URLをブラウザで叩いて、404であるかどうかって時点で違うよね。
ajaxがどうのと言ってるけど、ajaxなんか発生しない、単なる画面切り替えのhistoryAPI操作もあるよね。
それは、もとの画面が切り替わった状態、として扱われるべきだよね。リロードの時。
でも、使うのはSSR無しだと同じコンテンツだよね。だからpathinfo使うんだよね。
頭おかしくなってるのはこのへん。
で、画面切り替えではなく、手入力で変なアドレス入れられると、
「切り替えるはずの画面が無かった」なんて判断は、JS側にしか出来ないよね、って言ってる。 >>938
ダム端もレンダリングしてくれるよ。
エスケープシーケンスで。
お前色々知らなすぎるだろ。 >>937
> サーバは、API以外同じコンテンツをどのURLでも吐くもんだろ。SSR無しのSPAなら。
コンテンツとHTTPステータスは別。
同じコンテンツを返しても、HTTPステータスは違っても良い。
極端な話、404を返しながら、コンテンツを返すことだってある
それからSPA(それはクライアントの話)によってサーバーが挙動を変えるわけじゃない。
サーバーにとってクライアントがなにでどうやって動いているかは関係ない
(サーバー側が手抜きだから)HTTPステータスが全部200を返してしまう。
ページがなくても200を返してしまう。って話だから
それならサーバー側をちゃんと作りましょうで終わる話 >>940
コンテキスト理解してないのか?
このスレで言うレンダリングとは、HTMLのレンダリングだよ
馬鹿かw SPAはアプリケーションであって、Webページの軽量版でもおしゃれ版でもリロードなし版でも無い。
一つの画面に1リクエストでもない。
アプリケーションなんだから。
こいつの頭の中でポップアップする子画面とかどう処理されてるのか謎過ぎる。 >>941
違うよね。手抜きだからではなく、知り得ない情報だから、200何だよ。
お前バカなの? >>942
うん?
ただレンダリングするだけなら、ダム端と同じ、は
ただHTMLをレンダリングするだけなら、ただエスケープシーケンスをレンダリングするダム端と同じだ、と言ってるんだが。
コンテキスト読めてる? >>939
> >>936
> なんで忘れなければいけないんだ…?
> >>834
> が発端だろ。
だから、SPAがどうのこうのって考えてる事自体が間違いなんだよ
>>834のリンク先のソフト404エラーの内容見てみ?
SPAの話であるとか全く関係ない
リンク先引用しようか?
> ソフト 404 エラーとは、サイトの URL にアクセスしたときに、
> ページが存在しないことを示すページと 200 レベル(成功)のコードがブラウザに返されることです
「サイトの URL にアクセスしたときに」って書いてあるだろ。
SPAでもなんでも構わないが、サイトのURLにアクセスしない時には全く関係ない話。
(SPAで)サイトのURLにHistory APIで変更すると、サーバーにアクセスしなくても画面に表示できる〜とか
いいだすから、おいおいってなる。前提が違うだろ。サーバーにアクセスしない時は考える必要がない。
サイトの URL にアクセスしたときの話なんだから
ただのa要素のリンクだろうがHistory APIで変更しようが関係ない。どちらも同じURLだ。
そのURLに対して「サイトのURLにアクセスした時に」404を返すのがソフト404対策なんだよ。
で、発端の>>834へのレスだ
> SPAを作る時にページが存在しない場合にをどうやって404を返せばいいんでしょうか?
「サイトの URL にアクセスされたときに」データがなければ404を返せばいい
SPAとか考える必要はない。 >>945
ダム端の定義がしたいなら、どっかよそでやれ >>946
だから、データが無いか知ってるのはアプリケーションになってしまうのが、SPAだから、問題になってるんだよ。
お前が最初の時点から読み間違えてるの。
バカなの。
いいかげん認めて。めんどくさくなってきた。
技術者なら知らないことを知りませんでしたと言うのは大切だよ。 >>947
ウキウキとダム端について間違った事語って、知らない事が出てきたらこうなる。
楽な生き方だな。 >>948
> だから、データが無いか知ってるのはアプリケーションになってしまうのが、SPAだから、問題になってるんだよ。
404ってサーバーが返すものだぞ?
サーバーがデータがないとクライアントに返すものなのに、
データが無いか知ってるのがアプリケーション?
サーバーと関係ない話なら最初から404とか200ですら出てこないだろ。
問題になるどころか、問題そのものがない ん? もしかして>>834もそうなのかもしれないが、他のやつも
404が「サーバーから返すもの」
つまり HTTPというプロトコルを使ってクライアントから
サーバーにアクセスした時に、サーバーからクライアントへ
返すものだって分かってないのか? 404はHTTPプロトコルレベルの話なんだから、
仮にHTMLとJavaScriptだけで動くものがって
一切サーバーとアクセスしない=HTTPプロトコルを使わない場合
には、当然HTTPプロトコルレベルの話であるHTTPステータスコード404(200も)はでてこない。
これは常識だよね?
ここまではいいよね? そもそも>>834の言う
>SPAを作る時にページが存在しない場合に
の解釈が違っている気がする。
俺はそもそもどういう状況のことを言っているのか理解できなかったが。 一切アクセスをしないと言えど、リロード時にはリクエストは飛ぶからな。サービスワーカーにでも。
その時帰ってくるのはコンテンツとしては200、ただしHTML/JSが表示するのは存在しないというエラーになるだろうが。
プロトコル上の404と、ソフト404(≒200)はもちろん区別ついてるが、一般的にソフト404と呼ぶんだよ。
ソフト404ってのはプロトコル上のエラーコードを概念的な名前として使ってるだけであって。
お前が、周りが何を問題にしてるかわかってないんだろう。
いろんな問題をごちゃまぜにした結果馬鹿な事言ってると思いたいわ。 >>954
俺はHTTPステータスコード404を返したいんだから、
HTTPプロトコルでサーバーにアクセスのは当然の話として
> SPAを作る時にページが存在しない場合にをどうやって404を返せばいいんでしょうか?
というのは今現在200が返ってきてしまって困っているという状況には
>>917 で説明したパターンで起こるのを知っているからその話だと理解した
下手な作りだと、例えば http://example.com/foo/1 でデータがなくて
普通のウェブアプリだと404が返ってくる状況でも、(下手な)SPAの作りだと
>>917みたいに一旦 SPA(Single Page Application)のシングルに相当するページを表示してから、
(404になる)データを読み込むという流れだから、200になってしまう。
これを404にするにはどうすればいいかの話をしていたんだが?
そうか、やけにサーバーにアクセスしないことも有るって強調していたのは
HTTPリクエストを伴わないからそもそもHTTPの404の話なんかでてこないことに
気づいていなかったんだろうな。その時点で話について来れてなかったのか >>955
> 一切アクセスをしないと言えど、リロード時にはリクエストは飛ぶからな。サービスワーカーにでも。
> その時帰ってくるのはコンテンツとしては200、ただしHTML/JSが表示するのは存在しないというエラーになるだろうが。
サーバーにリクエスト投げてデータが無いなら404を返せよ。アホかw
サーバー側の実装がクソだから200になるんだろ
>>834はそれをやめたいって話だろ
(なんでやめたいかの話でSEOに脱線したわけだが) 違うよ。
SPAだと、example.com/
以下はHTTPで返すものは同じコンテンツを返して当然だと言ってるの。
例外はexample.com/api/xxxxみたいなAPIのURL。
その後についてくるfoo/1というのは、アプリケーションに対するパラメータであって、HTTPサーバがハンドリングする「ための」ものではない、と。
example.com/history/2017
というURIは、historyの2017分、というSPAへのパラメータであって、それが存在するかどうかはHTTPサーバは知りようが無い。
というか、historyが存在するかどうかも関係ない。
アプリケーションは、history/2017というルートから、適切なコントロールとapiで、ログイン認証したり、履歴ページを表示したり、そこに、ログインユーザ(またはpuiblicな)の2017年分のデータをapiから取得して並べたりする。
apiのレスポンスとして404もわかるが、その404は200データなしとは異なるよね、ってのが前半に言ってた事で。
200になってしまう、と言うのは話がおかしくて、200で当然だが、なんだよ。
レスポンスを404にしたいんじゃなくて、404というレスポンスの値に相当する表示を表現するにはどうしたら良いか、の話だろ。 > SPAだと、example.com/
> 以下はHTTPで返すものは同じコンテンツを返して当然だと言ってるの。
ほんと呆れる。クライアントのことなんかなんけいないって言ってるのに
まーだクライアントがSPAで動いているとーとか言ってやがる >>957
違う。お前は本当に馬鹿なんだと思う。
そして、データなしは404とは違う。404は未検出、だ。データなしは200の空レスポンスとは相当意味合いが違う。 > 一切アクセスをしないと言えど、リロード時にはリクエストは飛ぶからな。
自分でリロードした時にサーバーにリクエスト飛ぶと言ってるくせにw
> その後についてくるfoo/1というのは、アプリケーションに対するパラメータであって、HTTPサーバがハンドリングする「ための」ものではない、と。
HTTPサーバーがハンドリングするだろ。その時に404返せって
言ってるのにこいつは理解しない
お前の作ったクソSPAは200を返すんだって何度も繰り返し言わなくてもわかってるわ
それがクソだから修正して404を返すようにしろって話だ。 >SPAを作る時にページが存在しない場合にをどうやって404を返せばいいんでしょうか?
なんだから、SPAの話をして当然だろ。
SPAよくわかんないから旧石器時代の話します、とかもう間抜けすぎるからやめて。 >>962
違うよね。
HTTPサーバは関与できない。
その処理はクライアントの実装次第で、サーバ側の処理としては存在しないから。
その二重管理は間違ってるし、ユーザしか知り得ない情報をサーバに持ち込むのは全く持って意味が無いというかデメリットしかない。
ユーザしか知り得ないことを正しく知らないのは大切。
だから、HTTPサーバは、pathinfoでなりなんなり、好きな方法で良いが、静的なコンテンツを吐く。
そもそもお前は404の意味もちょっと間違ってる。 >>960
> そして、データなしは404とは違う。404は未検出、だ。データなしは200の空レスポンスとは相当意味合いが違う。
リソースとして考えろ、中の実装は忘れろ。
URI、例えば http://example.com/foo/1 というURIで示したい
リソースをNot Foundとしたいなら404だ。
http://example.com/foo/1 を表示した時、周りに広告やらカテゴリやら
いろんなデータがついてることよくあるよな? 例えそんなのがあったとしても
「http://example.com/foo/1 というURIで示したいリソース」がないなら404にするんだよ
SPAのhtml/jsがあったからって200にするな
抽象化して物事を考えられないのか
基準は「http://example.com/foo/1 というURIで示したいリソース」だ
まわりの関係ないもので判断するんじゃねーよ >>962
そもそも、ページ(正確にはSPAの画面)は存在するんだよ。
そして、画面は一つのリソースから構成されてるわけじゃないんだから。
200で画面出して、集まったデータ分表示するのはまっとうでしょ。
そこで、APIが200のデータなしではなく404返したなら、完全なるエラー画面に飛ばす必要があるかもしれんが。 >>963
お前、質問者が
HTMLを作る時にページが存在しない場合にをどうやって404を返せばいいんでしょうか?
っていったら、HTMLの話すんのか?
404を返すのはHTTPサーバー(or ウェブアプリ)なんだから、
質問者が関係ないものを持ち出してきたものとして、HTMLの話ではなく
HTTPサーバー(or ウェブアプリ)の話をするだろ >>966
画面が存在するのと404を返すのは別の話
カスタム404ページとか調べてこい
画面は存在するが、404を返している。
そして忘れんなよ? HTTPステータスコードは
HTTPプロトコルで、サーバーにアクセスした時に
サーバーから返す時に使うものだ >>965
リソースとして考えて、空と、見つからない、は断じて違うもの。
実装論だと、apiの互換性がなくなって旧ver消したなら、APIが見つからない、404。
apiはあってて、処理も正しく行われて、データなかったよ、は404とは限らない。
なら、APIが見つからないと切り分ける必要あるよね。
抽象化すると、
あるものは200
見つからないものは404
あったけど中身入ってないよ、は200
探し方が悪い、は400
お前には見せられない、は403
名乗れ、は401
サーバとして答えられん、は500系。
お前が抽象化できてないよ。
完全な実装論じゃん、 >>968
それも知ってるよ。知ってるからこういう話してるんだよ。
お前が言ってるリソースは、全部旧石器時代の話。 >>967
このどうやって404を、ってのは、存在しないものをどうやったら手に入れられるか、って話であって、
たとえ話に近いだろ。
そこに、いや、ajaxが、とかアスペのようにHTTPサーバについて一所懸命に勉強したつたない知識で騒がないで。 「URIが指し示すリソース」っていうのが分からんのかもなw
例えば以下の適当なページは404を返してくる
https://support.google.com/websearch/answer/dsfasdfasdfa
だが、画面上は検索ボックスやGoogleアプリのリンクや
ログイン状態といった「リソース」が表示されてる
>>966の馬鹿げた理屈では
> そして、画面は一つのリソースから構成されてるわけじゃないんだから。
> 200で画面出して、集まったデータ分表示するのはまっとうでしょ。
この適当なページにたいして>>966では200を出すのがまっとうだと言っているが
見ての通り、googleはそんなことはしていない。
なぜなら「URIが指し示すリソース」というのは(これはヘルプなので)
ペルプの1ページのことで、まわりにあるごちゃごちゃしたリソースのことではないから
もちろんこの周りにあるごちゃごちゃしたリソースにSPAのシステムも含まれる
画面が出るから200とかアホすぎw SPAだから200にするんだとかアホすぎw
200にするか404にするかは「URIが指し示すリソース」の存在の有無が基準だ 例示するとこれとかかな。
https://www.google.com/maps/search/aaaaaaasa/
200、該当する場所無しでアプリ開くよね。
お前の理屈ガッバガバ。 一つの画面が一つのリソースからできてるわけでないってのもわかるか。
画面を動かすとアドレスが変わるけど、リロードしてもSSRしていないリソースはそのまま落ちてくるのもわかるな。 >>979
そっちはWebページ、俺が挙げたのはSPA。
だから、おまえは旧石器時代の人間で、Webページからはなれて考えろって俺が言ってるの。 SPAでも同じ話だろ、って言いたいんだろうが、全然違うことがわかったよな。
技術についてこれねえやつは発言しないでくれるかな。
COBOLでは〇〇だった、とかドヤってくる無能そっくりなんだわ。 あ、なるほど、こいつURIリソースが見つからないのと
検索結果が見つからないをごっちゃにしてるのかw >>983
違うよ。
中でAPI呼んでるでしょ。
そのレスポンス見てみ?
これ以上間抜けさらさんと謝ればどうだ? >>981
> そっちはWebページ、俺が挙げたのはSPA。
SPAで404が返ってこないものを出して
200が返ってきましたーって意味ねーだろw
SPAを使って404を返してくるものをもってこいって。
画面に地図表示されて明らかに404じゃないのに
404でてないとかいわれてもな(苦笑 >>984
APIレスポンスの中で404になるべきものってどれですか? だからURIとURLを区別してたのに、アホなのかな。 >>985
だから、帰ってこないものなんだよ。
そう言ってんじゃん。
今回のアドレスも、404に相当するsnack出てるよねw あ、toastで出てるわ。snackじゃなかった。 >>988
> だから、帰ってこないものなんだよ。
> そう言ってんじゃん。
SPAはすべて200を返すものって言いたいのかな?w 実在するもの叩いたら、今回出てるのtoastわかると思うんだがな。
>>980
そうだよ。だからURIなの。httpとhttpsは違うものでしょw
Androidで見たら、前者叩いたらマップが開くんだよ。 >>994
自分でわかってるだろうが、違うよねww >>993
だから質問者はSPAで404を返すにはどうするかって話をしてるんだろ。
全てじゃないというのならやり方があるわけで、
そのやり方を聞いているんだろ
何が言いたいんだおまえは。 逆に「サーバしか知らない事」はクライアントで判断出来るわけねえじゃんw >>996
お前みたいにHTTPのレスポンスコードに依存してると一生わからん話だ。
ききわけろw 何が言いたいんだと言ってるやつが一番わかってないだけの大舞踏会のおしまいw このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 1064日 0時間 28分 55秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。