タグ

JavaScriptに関するnaga_sawaのブックマーク (335)

  • Webブラウザ上で純粋なHTTPだけで単方向リアルタイム通信を可能にするHTTPのストリーミングアップロードが遂にやってくる - nwtgck / Ryo Ota

    Web標準のHTTPクライアントfetch()でストリーミングしながらアップロードできるようになる。

    Webブラウザ上で純粋なHTTPだけで単方向リアルタイム通信を可能にするHTTPのストリーミングアップロードが遂にやってくる - nwtgck / Ryo Ota
    naga_sawa
    naga_sawa 2020/08/08
    つなぎっぱなしでちまちま送るというと逆方向だけどComet思い出す/素のHTTPだからWebSocketより特別扱い分が少なくて済みそう/とは言えサーバ側フレームワークがストリーミング受信に対応してないと取り扱い困難かしら
  • 知っていれば恐くない、XMLHttpRequestによるXSSへの対応方法

    XHRによってやり取りされるデータによるXSS 皆さんご存じの通り、Internet Explorer(以下、IE)ではContent-Typeに従わずにコンテンツをHTML扱いすることがありますので、XHRでやり取りされるデータを直接IEで開いた場合にXSSが発生することがあります。

    知っていれば恐くない、XMLHttpRequestによるXSSへの対応方法
    naga_sawa
    naga_sawa 2020/08/08
    APIレスポンスには X-Content-Type-Options: nosniff と Cache-Control: no-store 入れて勝手解釈とキャッシュ阻止/GETリクエストにはX-Requested-Withなど意図的なヘッダを必須にしてOriginチェックも忘れずに
  • useEffect完全ガイド

    あなたは Hooks を使って複数のコンポーネントを書きました。ちょっとしたアプリも作ったことがあるでしょう。満足もしている。API にも慣れて、その過程でコツも掴んできました。しかも重複したロジックを転用できるよう Custom Hooks を作り、同僚に自慢して見たり。 でも useEffect を使う度、いまいちピンときません。class のライフサイクルとは似ているけど、何かが違う。そしていろんな疑問を抱き始めます。 🤔 componentDidMount を useEffect で再現する方法は? 🤔 useEffect 内で正確に非同期処理を行う方法とは? []ってなに? 🤔 関数をエフェクトの依存関係として記すべき? 🤔 非同期処理の無限ループがたまに起こるのはなぜ? 🤔 古い state か props がエフェクト内にたまに入るのはなぜ? 私も Hooks を使

    naga_sawa
    naga_sawa 2020/07/05
    useEffect のあれこれ/JavaScrpitのキャプチャの挙動を把握していないと地雷ふみそう
  • JavaScriptでforEach, filter, map, reduceとか - Qiita

    連想配列(object)だと使えないので、eachはjQueryの$.each(collection, callback)の方が使い勝手がいいかも。 [2, 5, 9].forEach(function(element, index, array) { console.log(index + ":" + element); /** * 0:2 * 1:5 * 2:9 */ });

    JavaScriptでforEach, filter, map, reduceとか - Qiita
    naga_sawa
    naga_sawa 2020/07/05
    JavaScriptでの集合処理
  • Reactのchildren探訪 - Qiita

    ReactのJSXでも子要素を定義できますが、これが結構面白いものでした。 自作エレメントにも子要素 ReactのJSXでは、(DOMを組み立てるものである以上当然ですが)<div>の中に<a>を書いて、そしてさらに文字列を書き込む、ということが可能です。 そして、これはHTML由来のエレメントだけでなく、自作のコンポーネントでも実現可能です。 function SomeWrapper({children}) { return( <div className="some-class"> { children } </div> ); } このように、子要素はchildrenというPropとして渡ってきます。 childrenの中身が知りたくて では、このchildrenには何がどのような形式で来るのでしょうか。JSXの変換先であるReact.createElementのソースコードに当たって

    Reactのchildren探訪 - Qiita
    naga_sawa
    naga_sawa 2020/07/05
    ript][tips] React.createElement の children は props.children に入ってコンポーネントに渡される/コンポーネント側で Comp = ({children, ...props}) => {} のようにして分離するのがベター?
  • How to Render a Component Dynamically Based on a JSON Config

    naga_sawa
    naga_sawa 2020/07/05
    JSONベースで動的にエレメント生成
  • How to render dynamic component defined in JSON using React | Storyblok

    naga_sawa
    naga_sawa 2020/07/05
    JSONベースで動的にエレメント生成
  • React.useEffectで非同期処理をする場合の注意点2つ(変更あり) - Qiita

    はじめに React 16.8から導入されたhooksにはuseEffectがあります。 詳細は公式サイトをまず参照しましょう。 useEffectを使うと、コンポーネントのレンダリングとは別に処理を書くことができます。useEffectでしばしば非同期処理を書くことがあります。例えば、サーバからのデータ取得の処理などがあります。 以下では、useEffectで非同期処理を書く場合の注意点を2つ紹介します。ケースによっては注意点はこの2つだけではない可能性が高いので、ご留意ください。 promiseを返さない useEffectに渡す関数の戻り値はcleanup関数です。 useEffect(() => { console.log('side effect!'); const cleanup = () => { console.log('cleanup!'); }; return clea

    React.useEffectで非同期処理をする場合の注意点2つ(変更あり) - Qiita
    naga_sawa
    naga_sawa 2020/07/04
    useEffect で不用意に async すると暗黙の return Primise になるので注意/『It looks like you wrote useEffect(async () => ...) or returned a Promise』と親切な Warning 出してくれる
  • <script> タグに async / defer を付けた場合のタイミング - Qiita

    HTML5 においては、<script> タグに、defer や async 属性を付与することで、これらの読込が HTML パースを妨害しないようにすることができます。これにより、サイトのメインコンテンツの読込がある程度高速化されます。 async にせよ defer にせよ、それほど詳細に動作を解説した記事が見つかりませんでしたので、記事では、これらの動作について解説します。 イベントについて まずは、async と defer の挙動を理解するために重要な、2つのイベントについて理解しましょう。 両者とも、MDN に十分な情報があるため、記事ではそれほど詳細には解説しません。 DOMContentLoaded HTML のパースが完了した直後に発火します。 MDN load HTML のパースが完了し、CSS や画像などのダウンロードと表示、JavaScript ファイルのダウン

    <script> タグに async / defer を付けた場合のタイミング - Qiita
    naga_sawa
    naga_sawa 2020/07/04
    DOMContentLoadedでkickしたい部分はdefer/いつでもいいので読み込み次第な部分はasync/block避けにbodyの最後でscript読んでいた定番が陳腐化してhead内でdefer付きで読むのが新定石になるか
  • JavaScriptのスコープ総まとめ | 第1回 スコープの種類とその基本

    関数の仮引数とvarは関数スコープだけを生成し、letとconstは関数スコープとブロックスコープの両方を生成します。 ここまでは、各スコープの概要について簡単に紹介しました。次節からは、それぞれのスコープの仕様に基づき、スコープについて知っておきたい基礎的なことをまとめていきます。 グローバルスコープとwindowオブジェクト グローバル変数を宣言するというのは、実際にはグローバルオブジェクト(ブラウザの場合はwindowオブジェクト)のプロパティを追加することになります。 そのため、グローバル変数は、windowオブジェクトのプロパティとしてアクセスできます。 var scope = 'global'; // windowオブジェクトのプロパティとして追加される console.log(window.scope); // -> global なお、letやconstをトップレベルで宣言

    JavaScriptのスコープ総まとめ | 第1回 スコープの種類とその基本
    naga_sawa
    naga_sawa 2020/05/31
    JavaScriptは変数宣言忘れるとグローバルスコープ/ 'use strict';
  • JWT・Cookieそれぞれの認証方式のメリデメ比較 - Qiita

    JWTとは JSON Web Tokenの略。ジョットと読むらしい。 ざっくりいうとJsonに電子署名を加え、URL-Safeな文字列にしたTokenのこと 正確にいうと、電子署名を使用する方式はJWS(JSON Web Signature)と呼ばれ、別途暗号化を使用するJWE(JSON Web Encryption)も存在する。よく見かける説明はJWS方式のほう。 JWS方式の場合、電子署名であり暗号化ではないため、中身を見ることは可能。但し改ざんはできない、という仕組み。 実際のユースケースで言うと、サーバ側で認証情報が入ったJsonを加工(電子署名を加える等)し、JWTにしたのち、それを認証Tokenとしてクライアントに渡す。クライアントはそのTokenを認証Tokenとして使用する。 仕組みについては調べればたくさん出てくるのでそちらを参照したほうが良いかと思います。 この記事では

    JWT・Cookieそれぞれの認証方式のメリデメ比較 - Qiita
    naga_sawa
    naga_sawa 2020/05/09
    ブラウザアクセスの場合JWTを安全に保管できないので避けるべき/HTTPヘッダを使うJWTでの認証認可はネイティブクライアント用バックエンド用の限定と考えておくのが無難
  • JWTは使うべきではない 〜 SPAにおける本当にセキュアな認証方式 〜 - Qiita

    React/Redux/Spring Boot/AWSでSPAを作っているのですが 認証の方式をどうするか悩みました。 ベストと思われる認証方式をこちらに記載することにしました(随時更新します)。 JWTは使うべきじゃない ログイン済みであるという事実を サーバーサイドのセッションを使わずに保存しておく場合、 ログインした後でJWTなどのトークンをサーバーで生成し、 それをクライアントサイドで何らかの形で保存しておく必要がある。 なぜなら、ReactおよびReduxのstateで管理してしまうと、 ページをリロードされたときにstateがクリアされてしまうから。 具体的な保存先はローカルストレージくらいしか無いのだが JWTをローカルストレージに格納するのは危険。 なぜなら、ローカルストレージはJavaScriptで簡単に読み込めてしまうから。 自ドメイン以外のJavaScriptを読み込

    JWTは使うべきではない 〜 SPAにおける本当にセキュアな認証方式 〜 - Qiita
    naga_sawa
    naga_sawa 2020/05/09
    APIにブラウザからアクセスする場合、jsを介すと安全にJWTを保持できないので避けるべき/ブラウザからのアクセス時はhttponly cookieに、nativeからのアクセス時はJWTとサーバ側で両対応にすべき
  • JavaScript で簡易メトロノームを作ったメモ - Qiita

    // tempo : テンポ(1分間に何拍するか) // beat : 拍子(指定した拍数ごとに高いビープ音を鳴らす) function metronome(tempo, beat){ // 低め音 var low = "UklGRnoGAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQoGAACBhYqFbF1fdJivrJBhNjVgodDbq2EcBj+a2/LDciUFLIHO8tiJNwgZaLvt559NEAxQp+PwtmMcBjiR1/LMeSwFJHfH8N2QQAoUXrTp66hVFApGn+DyvmwhBTGH0fPTgjMGHm7A7+OZSA0PVqzn77BdGAg+ltryxnMpBSl+zPLaizsIGGS57OihUBELTKXh8bllHgU2jdXzzn0vBSF1xe/glEILElyx6OyrWBUIQ

    JavaScript で簡易メトロノームを作ったメモ - Qiita
    naga_sawa
    naga_sawa 2019/11/21
    JavaScriptでメトロノーム
  • JavaScript で Beep 音を鳴らす方法 - Qiita

    JavaScript で Beep 音 を鳴らしたかったのですが,beep()のような関数はなくて,自作する必要があります. 今回は,JavaScript だけでなんとかできないかなーと思った調べたものをまとめます! まずは結果から...こんな感じで1行でできますね! new Audio("data:audio/wav;base64,UklGRnoGAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQoGAACBhYqFbF1fdJivrJBhNjVgodDbq2EcBj+a2/LDciUFLIHO8tiJNwgZaLvt559NEAxQp+PwtmMcBjiR1/LMeSwFJHfH8N2QQAoUXrTp66hVFApGn+DyvmwhBTGH0fPTgjMGHm7A7+OZSA0PVqzn77BdGAg+ltryxnMpBSl+zPLaizsI

    JavaScript で Beep 音を鳴らす方法 - Qiita
    naga_sawa
    naga_sawa 2019/11/21
    Audio要素経由で音を出す方法/src を data URI で与えるとスマート
  • That's so fetch!

    There's been some confusion around the new fetch API recently. Let's clear things up. The first thing you'll notice about fetch is it's a massive improvement on XMLHttpRequest in terms of API design. Here's how to get some JSON using XHR: var xhr = new XMLHttpRequest(); xhr.open('GET', url); xhr.responseType = 'json'; xhr.onload = function () { console.log(xhr.response); }; xhr.onerror = function

    That's so fetch!
    naga_sawa
    naga_sawa 2019/11/21
    FetchAPI Stream受信処理/チャンク区切りで送られてくる場合はチャンク途中までの受信になる場合があるので、その端数処理が必要
  • JavaScriptのStreams APIで細切れのデータを読み書きする

    近年、PCに搭載されるメモリは爆発的に増えました。16GBや32GBのメモリが搭載されているのが当たり前の時代です。性能の制限が強いスマートフォンですら4GBほど搭載していることがあります。ストレージの読み書き速度もどんどん加速し、昔では扱えなかったようなデータ量をリアルタイムで処理できます。インターネット回線も同様に大量のデータを扱えるようになりました。 しかし現実的な大きさのデータを一度に扱おうとすると、現代でもそれなりに処理時間がかかります。ユーザはレスポンスに対して敏感で、反応が0.1秒でも遅れるとストレスを感じます。しかし時間がかかるものはかかるのです。この問題は一見どうしようもないように思えます。 そこで登場するのが「データを細切れにして処理する」というコンピュータにおける万能の薬です。細切れにして逐次処理すれば、少しずつデータを処理することができ、素早いレスポンスを実現するこ

    JavaScriptのStreams APIで細切れのデータを読み書きする
    naga_sawa
    naga_sawa 2019/11/21
    FetchAPI Streamでの受信方法
  • Fetch APIのStream機能を使ってデータを読み込みながら地図を描画する

    地理空間データはどうしてもデータサイズが大きくなりがちです。 通常のデータ読み込みでは、読み込みが終わるまで地図の描画を始めることができないのですが、Fetch APIのReadableStreamを使うことで、「一部データを読み込んでは地図の一部分を描画する」という分割したレンダリングを実装することができます。 サンプルコード 約50MBのポリゴンデータを読み込みながら逐次描画しています。 DEMO //地理データをstreamを使って読み込む fetch("city.txt").then((response) => { const reader = response.body.getReader(); const stream = new ReadableStream({ start(controller) { function push() { reader.read().then(

    Fetch APIのStream機能を使ってデータを読み込みながら地図を描画する
    naga_sawa
    naga_sawa 2019/11/21
    FetchAPI Streamで受信して受信した分ずつ処理していく方法/ストリーミングでデータ流してくるWebAPIの処理に
  • JavaScriptの等値比較を全部理解する - Qiita

    皆さんこんにちは。今回の記事ではJavaScriptの等値比較について見ていこうと思います。 「どうせ==と===の違いとかだろ? 今さらそんな記事書くなよバーカw」と思った人はぜひ期待せずに読み進めてみてください。 「じゃあObject.isでしょ? 知ってる知ってる、使ったことないけど」と思った人はまあ読まなくても大丈夫です。 さて、等値比較というのは、2つの値が等しいかどうか判定することです。JavaScriptにおいて等値比較はどのように行うのか、そしてどのような場面で等値比較が発生するのかをこの記事では余すことなく紹介します。 以降、この記事で仕様書という場合はECMAScript® 2018 Language Specificationを指すものとします。 ==と=== とはいえ、まずは==と===の話をしないことには始まりません。==はJavaScript初心者がとりあえず習

    JavaScriptの等値比較を全部理解する - Qiita
    naga_sawa
    naga_sawa 2018/11/24
    比較は基本の基本なんだけど JavaScript のそれは妙にややこしい気がして
  • JWT 認証のメリットとセキュリティトレードオフの私感 - ..たれろぐ..

    2020/5/9追記: 考えた結果、Authorization Bearer ヘッダを使った正規のJWTの場合、同一ドメイン下で読み込む全 JavaScript が信用できる場合でないとブラウザ上で安全にトークンを保持できないのでブラウザからのAPIアクセス時の認証用には使うべきではないというところに着陸しました。ブラウザからのアクセスでは http only cookie にトークンを入れ、 CSRF 対策も忘れずにというこれまで通りの定石が手堅いように思います。 JWTを使うのはトークンの安全な保管ができる非ブラウザなネイティブクライアントからのAPIアクセス時に限った方がよさそうです。 APIサーバ側ではアクセス元に合わせて認証方法を使い分ける両対応が要求されるので手間は増えますが手抜きできる場所でもないので仕方なしと。 React(SPA)での認証についてまとめ - エンジニア

    JWT 認証のメリットとセキュリティトレードオフの私感 - ..たれろぐ..
    naga_sawa
    naga_sawa 2018/09/22
    セルクマ/正直これで正しいのかもよく分からない/だれかAPI用認証のベストプラクティス的なの教えて…/→ブラウザアクセスではTokenを安全に保管できないので不向きっぽい/定石のhttponly cookieとCSRF防御でええやん?に着地
  • Headless mode - Mozilla | MDN

    Since Firefox 57, the --screenshot flag allows you to take screenshots of websites. The basic usage is as follows: /path/to/firefox -P my-profile -headless --screenshot https://developer.mozilla.org/ This creates a full-height screenshot of https://developer.mozilla.com/en-US/ called screenshot.png, in the active directory, with a viewport width of 800px. You can omit -headless when using --screen

    Headless mode - Mozilla | MDN
    naga_sawa
    naga_sawa 2017/09/01
    Firefox も headless モードサポートしてきた/状態遷移とかの動きのデバッグに