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

みんなの評価 :
レスフィルター : (試験中)
>>600
なるほど
それはヤバそうだ
基本的に人間が手動でできることはやりたいと思ってたからそれができるとその攻撃でやられちゃうな
自作のブラウザ作ってそれ出来るようにしちゃうとヤバいな
まあそんなブラウザ世の中に存在しないだろうからそういう攻撃もないかも知れんが
なるほど
それはヤバそうだ
基本的に人間が手動でできることはやりたいと思ってたからそれができるとその攻撃でやられちゃうな
自作のブラウザ作ってそれ出来るようにしちゃうとヤバいな
まあそんなブラウザ世の中に存在しないだろうからそういう攻撃もないかも知れんが
>>601
ヘッドレスクロニウムでいくらでもできるんだが
ヘッドレスクロニウムでいくらでもできるんだが
拡張機能にユーザーが権限与えて通信する分には問題ない
勿論怪しい拡張機能もあるがそこはユーザーの判断
勿論怪しい拡張機能もあるがそこはユーザーの判断
クロスオリジンがブロックされるのはブラウザのユーザーを守るため
ユーザーがリスクを理解してブロックされないようにするのは自由
ユーザーがリスクを理解してブロックされないようにするのは自由
消えた理由は聞いたことないけど、一時期採用されてたユーザースクリプトも、悪用の可能性を消せなくて消えて行ったんだと思う
あれもクロスオリジンの壁を越える一つの手段だったから
あれもクロスオリジンの壁を越える一つの手段だったから
ユーザースクリプトは今でも普通に使える
クロスオリジンの制限はあるけど
クロスオリジンの制限はあるけど
「要素をクリックしたら」というイベントを設置しつつ、フラグを仕込んで処理が終わるまで
重複で発火しないようにしてあります。
ですが、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();
重複で発火しないようにしてあります。
ですが、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();
JavaScript はシングルスレッドだからフラグで排他処理しようとしても意味がないんだと思ってたけど、
思い込みで間違ってる?
思い込みで間違ってる?
メインスレッドだけなら1つの関数が同時並列に実行されることはない
がクリックイベントはJSのmessage queueにキューイングされるんで
ボタンがクリック可能なら何度でもクリックできる
だいたい防げればいいのであればとりあえずボタンをdisableにすればいい
OSのイベントキューもあるから100%複数クリックを防ぐのは無理
がクリックイベントはJSのmessage queueにキューイングされるんで
ボタンがクリック可能なら何度でもクリックできる
だいたい防げればいいのであればとりあえずボタンをdisableにすればいい
OSのイベントキューもあるから100%複数クリックを防ぐのは無理
タッチイベントで何してるかは分からんが、passiveで良いものはpassiveにしないとダメだぞ
>>613
間違ってる
JavaScriptはシングルスレッドだから
JavaScriptを呼び出す側をマルチスレッドにすることで
擬似的にJavaScriptがマルチスレッドっぽくなるように作られてる
間違ってる
JavaScriptはシングルスレッドだから
JavaScriptを呼び出す側をマルチスレッドにすることで
擬似的にJavaScriptがマルチスレッドっぽくなるように作られてる
>>618
タッチイベント自体は何もしていないです。
スムーススクロール中に発生していたのですが、利用しているのはクリックイベントでした。
何が原因かさっぱりですが、他イベントでpassive: false;にすると影響出たりするのでしょうか?
タッチイベント自体は何もしていないです。
スムーススクロール中に発生していたのですが、利用しているのはクリックイベントでした。
何が原因かさっぱりですが、他イベントでpassive: false;にすると影響出たりするのでしょうか?
>>619
Web Worker なら変数のスコープは独立してるからフラグにはアクセスできないよね?
Web Worker なら変数のスコープは独立してるからフラグにはアクセスできないよね?
>>621
そんな話はしてない。シングルスレッドでも排他処理は必要という話だ。
そんな話はしてない。シングルスレッドでも排他処理は必要という話だ。
>>623
ワケわからん
シングルスレッドならば処理途中に割り込みされない
擬似的にマルチスレッドすれば割り込まれる
しかし擬似マルチスレッドでは、排他以前に変数アクセスできない
排他したいが変数じゃ無理でしょ、と言ってるんだけど
ワケわからん
シングルスレッドならば処理途中に割り込みされない
擬似的にマルチスレッドすれば割り込まれる
しかし擬似マルチスレッドでは、排他以前に変数アクセスできない
排他したいが変数じゃ無理でしょ、と言ってるんだけど
>>619の認識は間違ってるから掘り下げても無駄だぞ
>>626
「是非」という言葉の意味を分かってる?
>>622のどこをどう読んだら是非について語ってると思えるのかが分からんが
そこに拘ってたら話が進まないのでリセットする
別にフラグでも排他処理はできるでしょ
たとえばコンテンツの表示内容を通信で取ってきて更新するupdate関数を考えたとき
通信開始して更新が完了するまでの間に関数が多重に呼ばれることのないようにしたいでしょ
そしたらフラグを使ってこのように書いてもいいじゃん
let flag
async functuon update() {
if (flag) return
flag = true
elm.textContent=await (await fetch('......')).text()
flag = false
}
他にもアニメーションの関数があれば
アニメーション中に再び呼ばれることがないようにしないと
アニメーション中にアニメーションが開始されたら
よくイメージできるようなガクガクブレブレの表示になるでしょ
それも同じようにフラグによって回避できる
ちなみにフラグを使うときの注意点は例外が起きたり、
うっかりフラグが立ったまま抜けてしまうこと
本当に複雑に非同期が絡み合うと、どうしても予想外なデッドロックが起こりがち
そういうときにはタイムアウトを入れたり
定期的にタイムラインを精査して「掃除」したりして
最悪ごまかしで対処しないといけなくなる
「是非」という言葉の意味を分かってる?
>>622のどこをどう読んだら是非について語ってると思えるのかが分からんが
そこに拘ってたら話が進まないのでリセットする
別にフラグでも排他処理はできるでしょ
たとえばコンテンツの表示内容を通信で取ってきて更新するupdate関数を考えたとき
通信開始して更新が完了するまでの間に関数が多重に呼ばれることのないようにしたいでしょ
そしたらフラグを使ってこのように書いてもいいじゃん
let flag
async functuon update() {
if (flag) return
flag = true
elm.textContent=await (await fetch('......')).text()
flag = false
}
他にもアニメーションの関数があれば
アニメーション中に再び呼ばれることがないようにしないと
アニメーション中にアニメーションが開始されたら
よくイメージできるようなガクガクブレブレの表示になるでしょ
それも同じようにフラグによって回避できる
ちなみにフラグを使うときの注意点は例外が起きたり、
うっかりフラグが立ったまま抜けてしまうこと
本当に複雑に非同期が絡み合うと、どうしても予想外なデッドロックが起こりがち
そういうときにはタイムアウトを入れたり
定期的にタイムラインを精査して「掃除」したりして
最悪ごまかしで対処しないといけなくなる
複数回クリックさせたくないならどこかのレイヤーでスロットルしないと
キューイングされた処理を1つ1つ逐次処理してるんだから
>>611のように非同期でない1つ処理を変数で排他制御しようとしたところで意味はない
キューイングされた処理を1つ1つ逐次処理してるんだから
>>611のように非同期でない1つ処理を変数で排他制御しようとしたところで意味はない
なんでfor?
末尾ならpopしてそれ以外ならnullかemptyで上書きするメソッドを書けばいいでしょ?
でも結局nullかemptyのハンドリングが必要だから末尾でも同じように処理して問題ある?
もしデータ量が多くてコンパクションが必要なケースならpopしただけじゃダメな気がするので
コンパクション目的の処理を別途切り出したほうがいいかも
末尾ならpopしてそれ以外ならnullかemptyで上書きするメソッドを書けばいいでしょ?
でも結局nullかemptyのハンドリングが必要だから末尾でも同じように処理して問題ある?
もしデータ量が多くてコンパクションが必要なケースならpopしただけじゃダメな気がするので
コンパクション目的の処理を別途切り出したほうがいいかも
あの〜馬鹿馬鹿しい質問なのかも知れないのですが。。
let newArr などで宣言した変数がブラウザのコンソールから呼べません…
varならどこからでも参照できるのかなと思ってvarにしてもダメ。
全部外して、newArrだけにすると呼べます。これはナゼですか?
let newArr などで宣言した変数がブラウザのコンソールから呼べません…
varならどこからでも参照できるのかなと思ってvarにしてもダメ。
全部外して、newArrだけにすると呼べます。これはナゼですか?
ある要素にホバーすると、その要素の上端に高さ不定のホップアップが表示されるようになっています。
このホップアップが位置次第ではbodyの上端を超えてしまいます。
ホップアップはposition: absolute;で座標を指定しているので
bodyに高さは反映されません。
このような場合にホップアップの分だけ上にスクロールしたいのですが
何か良い方法はありませんでしょうか?
jsでホップアップの高さの分だけbodyに高さを付与しようと思っていますが
恐らく高さが増えた瞬間に表示位置がずれてしまうと考えています。
表示位置が変わらずに対処する方法はありますかね?
このホップアップが位置次第ではbodyの上端を超えてしまいます。
ホップアップはposition: absolute;で座標を指定しているので
bodyに高さは反映されません。
このような場合にホップアップの分だけ上にスクロールしたいのですが
何か良い方法はありませんでしょうか?
jsでホップアップの高さの分だけbodyに高さを付与しようと思っていますが
恐らく高さが増えた瞬間に表示位置がずれてしまうと考えています。
表示位置が変わらずに対処する方法はありますかね?
配列同士を比較して値が含まれてたらそのインデックスを返させるには
どうすればいいの?
どうすればいいの?
あ、もしかしてそんなメソッドは存在しなくて
右の配列から1つづつ取り出して、何個目でヒット
みたいなのをIndexOfとかforEachなんかでやるしかないっぽいかも。。
右の配列から1つづつ取り出して、何個目でヒット
みたいなのをIndexOfとかforEachなんかでやるしかないっぽいかも。。
>>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]);
とりあえずこんな感じか?
細かいところは好きに調整して
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]);



類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.141 + (1001) - [100%] - 2019/9/22 23:15
- + JavaScript の質問用スレッド vol.142 + (984) - [97%] - 2020/8/27 19:15
- + JavaScript の質問用スレッド vol.131 + (1004) - [97%] - 2018/3/7 13:30
- + JavaScript の質問用スレッド vol.121 + (1001) - [97%] - 2015/1/1 18:30
- + JavaScript の質問用スレッド vol.121 + (1001) - [97%] - 2022/11/29 16:30
- + JavaScript の質問用スレッド vol.131 + (1000) - [97%] - 2017/1/25 8:01
- + JavaScript の質問用スレッド vol.144 + (288) - [97%] - 2020/5/17 20:00
- + JavaScript の質問用スレッド vol.111 + (1001) - [97%] - 2013/11/4 6:00
- + JavaScript の質問用スレッド vol.142 + (926) - [97%] - 2019/12/23 13:15
- + JavaScript の質問用スレッド vol.143 + (753) - [97%] - 2020/4/19 5:00
- + JavaScript の質問用スレッド vol.101 + (1001) - [97%] - 2012/7/16 14:15
- + JavaScript の質問用スレッド vol.140 + (1001) - [97%] - 2019/9/19 10:45
- + JavaScript の質問用スレッド vol.102 + (1001) - [95%] - 2012/9/11 17:30
- + JavaScript の質問用スレッド vol.123 + (966) - [95%] - 2020/10/20 2:30
- + JavaScript の質問用スレッド vol.122 + (116) - [95%] - 2018/5/2 18:30
- + JavaScript の質問用スレッド vol.122 + (1004) - [95%] - 2015/2/14 4:45
- + JavaScript の質問用スレッド vol.100 + (1001) - [95%] - 2012/6/13 22:46
トップメニューへ / →のくす牧場書庫について