のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,490,786人
昨日:no data人
今日:
最近の注目
人気の最安値情報

私的良スレ書庫

不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

元スレ+ JavaScript の質問用スレッド vol.141 +

JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
レスフィルター : (試験中)
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
601 : Name_Not - 2021/03/06(土) 10:35:06.20 ID:???.net (+44,+30,-36)
>>600
なるほど
それはヤバそうだ
基本的に人間が手動でできることはやりたいと思ってたからそれができるとその攻撃でやられちゃうな
自作のブラウザ作ってそれ出来るようにしちゃうとヤバいな
まあそんなブラウザ世の中に存在しないだろうからそういう攻撃もないかも知れんが
603 : Name_Not - 2021/03/06(土) 11:37:30.89 ID:???.net (+33,+29,-3)
>>601
ヘッドレスクロニウムでいくらでもできるんだが
604 : Name_Not - 2021/03/06(土) 11:39:02.33 ID:???.net (+27,+29,-32)
拡張機能にユーザーが権限与えて通信する分には問題ない
勿論怪しい拡張機能もあるがそこはユーザーの判断
605 : Name_Not - 2021/03/06(土) 11:46:39.87 ID:???.net (+27,+29,-29)
クロスオリジンがブロックされるのはブラウザのユーザーを守るため
ユーザーがリスクを理解してブロックされないようにするのは自由
606 : Name_Not - 2021/03/06(土) 12:49:06.79 ID:???.net (+39,+29,-26)
>>592
銀行のサイトから預金残高を取られて
病院のサイトから健康情報を取られてもいいなら
問題ないかもね
607 : Name_Not - 2021/03/06(土) 14:32:39.59 ID:???.net (+27,+29,-7)
全く関係ないw
クロスオリジン理解してないやつ多いんやな
608 : Name_Not - 2021/03/06(土) 15:14:35.57 ID:???.net (+27,+29,-24)
消えた理由は聞いたことないけど、一時期採用されてたユーザースクリプトも、悪用の可能性を消せなくて消えて行ったんだと思う
あれもクロスオリジンの壁を越える一つの手段だったから
609 : Name_Not - 2021/03/06(土) 15:41:36.59 ID:???.net (+27,+29,-12)
ユーザースクリプトは今でも普通に使える
クロスオリジンの制限はあるけど
610 : Name_Not - 2021/03/06(土) 19:42:11.54 ID:???.net (+33,+29,-9)
>>606
その程度なら
見やれてもそんなにダメージない気もするw
611 : Name_Not - 2021/03/06(土) 22:06:32.77 ID:???.net (-19,-30,-287)
「要素をクリックしたら」というイベントを設置しつつ、フラグを仕込んで処理が終わるまで
重複で発火しないようにしてあります。

ですが、androidのchrome、もしくはPCのchromeの検証ツールでスマホ表示にすると、
何故か何度もクリックできてしまうようです。
ただし、クリックするたびに画面がガクガクもたつくだけで、イベントの処理自体はフラグで中断されているようでした。
何が原因と思われますでしょうか。

イベント発火後に対象要素全てに対してpointer-events: none;を付けてみましたが、
それでもクリックできてしまっています。

var btn = document.getElementsByClassName('btn');
var flg = false;
var btnClick = function() {
if (flg) return;
flg = true;
処理
flg = false;
};
var fn = function() {
Object.keys(btn).forEach(function(v) {
btn[v].addEventListener('click', btnClick);
});
};
fn();
612 : Name_Not - 2021/03/06(土) 22:09:36.46 ID:???.net (+25,+29,-33)
>>611自己レスです
対象要素ではなく、どこをクリックしても画面がもたつく感じですので
タッチイベント周りかもしれません。
613 : Name_Not - 2021/03/06(土) 22:29:09.83 ID:???.net (+33,+29,-28)
JavaScript はシングルスレッドだからフラグで排他処理しようとしても意味がないんだと思ってたけど、
思い込みで間違ってる?
615 : Name_Not - 2021/03/06(土) 23:07:49.02 ID:???.net (-26,-29,-73)
メインスレッドだけなら1つの関数が同時並列に実行されることはない

がクリックイベントはJSのmessage queueにキューイングされるんで
ボタンがクリック可能なら何度でもクリックできる

だいたい防げればいいのであればとりあえずボタンをdisableにすればいい
OSのイベントキューもあるから100%複数クリックを防ぐのは無理
618 : Name_Not - 2021/03/07(日) 09:55:08.49 ID:???.net (+15,+19,-20)
タッチイベントで何してるかは分からんが、passiveで良いものはpassiveにしないとダメだぞ
619 : Name_Not - 2021/03/07(日) 10:24:51.40 ID:???.net (-7,-16,-15)
>>613
間違ってる
JavaScriptはシングルスレッドだから
JavaScriptを呼び出す側をマルチスレッドにすることで
擬似的にJavaScriptがマルチスレッドっぽくなるように作られてる
620 : Name_Not - 2021/03/07(日) 10:52:29.62 ID:???.net (-24,-29,-42)
>>618
タッチイベント自体は何もしていないです。
スムーススクロール中に発生していたのですが、利用しているのはクリックイベントでした。

何が原因かさっぱりですが、他イベントでpassive: false;にすると影響出たりするのでしょうか?
621 : Name_Not - 2021/03/07(日) 12:10:39.09 ID:???.net (-28,-29,-25)
>>619
Web Worker なら変数のスコープは独立してるからフラグにはアクセスできないよね?
622 : Name_Not - 2021/03/07(日) 19:29:57.00 ID:???.net (-7,+29,-52)
>>613
ストレージ系は共有されているので排他処理が必要になる
そうでなくとも1つの動作が非同期処理含むものだと
その間に他の処理が割り込む余地が生まれるから
広い目で見て排他処理が必要な時はある
623 : Name_Not - 2021/03/07(日) 19:41:38.39 ID:???.net (+29,+29,-6)
>>621
そんな話はしてない。シングルスレッドでも排他処理は必要という話だ。
624 : Name_Not - 2021/03/07(日) 19:51:32.45 ID:???.net (+42,+29,-27)
>>623
ワケわからん
シングルスレッドならば処理途中に割り込みされない
擬似的にマルチスレッドすれば割り込まれる
しかし擬似マルチスレッドでは、排他以前に変数アクセスできない

排他したいが変数じゃ無理でしょ、と言ってるんだけど
625 : Name_Not - 2021/03/07(日) 19:53:49.90 ID:???.net (+27,+29,-9)
>>619の認識は間違ってるから掘り下げても無駄だぞ
626 : Name_Not - 2021/03/07(日) 19:55:43.12 ID:???.net (-16,+29,-26)
>>622
JavaScriptはシングルスレッドだから「フラグで」排他処理はできないんじゃない?
と言ってるんだが
排他処理の是非なんて話してないよ
627 : Name_Not - 2021/03/07(日) 20:09:38.03 ID:???.net (-3,-4,-227)
>>626
「是非」という言葉の意味を分かってる?
>>622のどこをどう読んだら是非について語ってると思えるのかが分からんが
そこに拘ってたら話が進まないのでリセットする

別にフラグでも排他処理はできるでしょ
たとえばコンテンツの表示内容を通信で取ってきて更新するupdate関数を考えたとき
通信開始して更新が完了するまでの間に関数が多重に呼ばれることのないようにしたいでしょ

そしたらフラグを使ってこのように書いてもいいじゃん

let flag
async functuon update() {
if (flag) return
flag = true
elm.textContent=await (await fetch('......')).text()
flag = false
}

他にもアニメーションの関数があれば
アニメーション中に再び呼ばれることがないようにしないと
アニメーション中にアニメーションが開始されたら
よくイメージできるようなガクガクブレブレの表示になるでしょ
それも同じようにフラグによって回避できる

ちなみにフラグを使うときの注意点は例外が起きたり、
うっかりフラグが立ったまま抜けてしまうこと
本当に複雑に非同期が絡み合うと、どうしても予想外なデッドロックが起こりがち
そういうときにはタイムアウトを入れたり
定期的にタイムラインを精査して「掃除」したりして
最悪ごまかしで対処しないといけなくなる
628 : Name_Not - 2021/03/07(日) 20:12:35.67 ID:???.net (+30,+29,-38)
複数回クリックさせたくないならどこかのレイヤーでスロットルしないと

キューイングされた処理を1つ1つ逐次処理してるんだから
>>611のように非同期でない1つ処理を変数で排他制御しようとしたところで意味はない
629 : Name_Not - 2021/03/07(日) 20:13:22.98 ID:???.net (+7,+19,-1)
長文こわw
630 : Name_Not - 2021/03/07(日) 20:14:51.08 ID:???.net (+17,+24,-3)
twitterでも見てろ!
631 : Name_Not - 2021/03/08(月) 03:26:27.72 ID:???.net (+33,+29,-24)
>>624
排他処理がなにかわかってるのか?
共有のリソースを、片方が使ってる間に別のものが使うのを防ぐものであって
複数のスレッドとは限らないんだが
633 : Name_Not - 2021/03/08(月) 10:09:22.69 ID:???.net (+0,+12,-20)
>>632
ないんじゃね?
Arrayを使うユースケースじゃなさそうだけど
634 : Name_Not - 2021/03/08(月) 10:10:01.08 ID:XBQ7g0fZ.net (-20,+29,-13)
>>633
マジっすか
じゃあforで頑張ります
635 : Name_Not - 2021/03/08(月) 10:21:00.20 ID:???.net (-16,-19,-79)
なんでfor?
末尾ならpopしてそれ以外ならnullかemptyで上書きするメソッドを書けばいいでしょ?

でも結局nullかemptyのハンドリングが必要だから末尾でも同じように処理して問題ある?
もしデータ量が多くてコンパクションが必要なケースならpopしただけじゃダメな気がするので
コンパクション目的の処理を別途切り出したほうがいいかも
636 : Name_Not - 2021/03/08(月) 11:16:33.09 ID:???.net (+26,+28,-28)
そこら編のアルゴリズムはlodashにたくさんあるだろう
637 : Name_Not - 2021/03/08(月) 12:09:18.55 ID:???.net (+21,+23,-18)
9を消したいってのがindexの9なのか中身の9なのか
639 : Name_Not - 2021/03/08(月) 16:48:22.01 ID:???.net (+30,+29,-97)
あの〜馬鹿馬鹿しい質問なのかも知れないのですが。。
let newArr などで宣言した変数がブラウザのコンソールから呼べません…
varならどこからでも参照できるのかなと思ってvarにしてもダメ。
全部外して、newArrだけにすると呼べます。これはナゼですか?
640 : Name_Not - 2021/03/08(月) 17:06:29.32 ID:???.net (-29,-29,-98)
ある要素にホバーすると、その要素の上端に高さ不定のホップアップが表示されるようになっています。
このホップアップが位置次第ではbodyの上端を超えてしまいます。
ホップアップはposition: absolute;で座標を指定しているので
bodyに高さは反映されません。

このような場合にホップアップの分だけ上にスクロールしたいのですが
何か良い方法はありませんでしょうか?

jsでホップアップの高さの分だけbodyに高さを付与しようと思っていますが
恐らく高さが増えた瞬間に表示位置がずれてしまうと考えています。
表示位置が変わらずに対処する方法はありますかね?
641 : Name_Not - 2021/03/08(月) 17:06:57.38 ID:???.net (-27,-21,-15)
それローカル変数なんだろw
642 : Name_Not - 2021/03/08(月) 17:07:17.41 ID:???.net (+11,+18,+0)
>>641>>639
643 : Name_Not - 2021/03/08(月) 18:18:57.94 ID:???.net (-29,-24,-23)
>>640
トライした結果のコードか
トライする前の状態のコードを
最小限のサンプルにしてjsfiddle辺りに上げて
644 : Name_Not - 2021/03/08(月) 18:44:57.61 ID:8R1fLvCf.net (+30,+29,-12)
配列同士を比較して値が含まれてたらそのインデックスを返させるには
どうすればいいの?
646 : Name_Not - 2021/03/08(月) 18:56:00.74 ID:???.net (+29,+29,-13)
あ、配列同士?
なら要件による
>>644 でははしょられ過ぎで分かんない
647 : Name_Not - 2021/03/08(月) 19:10:17.11 ID:???.net (-23,-30,-19)
>>646
ごめん、説明が足らんかった
['1', '2', '3']に対して['3','4','5']を比較して
= index[0]って取得したいの
648 : 647 - 2021/03/08(月) 20:43:46.87 ID:???.net (+27,+29,-54)
あ、もしかしてそんなメソッドは存在しなくて
右の配列から1つづつ取り出して、何個目でヒット
みたいなのをIndexOfとかforEachなんかでやるしかないっぽいかも。。
650 : Name_Not - 2021/03/08(月) 22:40:30.05 ID:???.net (-24,-30,-122)
>>647
とりあえずこんな感じか?
細かいところは好きに調整して

var a = ['1','2','3','4'];
var b = ['3','4','5','6'];
var result = b.map((v,i) => {
return a.includes(v) ? i : null;
}).filter(v => v != null);
console.log(result);
console.log(result[0]);
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について