カテゴリー : JavaScript

[JavaScript] Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.

ローカル環境でローカルにある JSON ファイルを $.getJSON しようとすると Chrome では file スキーマは読み込んでくれなくてエラーが発生します。

JavaScript

続きを読む

[JavaScript] jsdom memory leak (メモリリーク)

Node.js で jsdom を利用して数万件のウェブページをスクレイピングしたところ out of memory エラーが発生しました。

Node.js のエラーメッセージ

FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory

jsdom のメモリリーク解決方法

jsdom.env メソッドに渡す callback メソッドの中で使用した window オブジェクトに関連するメモリを解放するために window.close() メソッドを呼ぶ必要があるそうです。

jsdom.env(html, function (errors, window) {
  // free memory associated with the window
  window.close();
});

ドキュメントに書いてある通りに使わないとダメだなぁと痛感しました・・・。


参考情報

tmpvar/jsdom

jsdom and node.js leaking memory – Stack Overflow

javascript – Memory leak in Node.js scraper – Stack Overflow

[JavaScript] merge recursive なメソッド

JavaScript で merge recursive なメソッドは lodash.merge を使うのが良さそう。

_.merge – Lo-Dash documentation

説明とかはここには書かないので、参考情報を読むといいですよ。


参考情報

underscore.jsだと再帰的にマージできないのでlodashを使う – Labo Memo

[JavaScript][BigDecimal] java.lang.RuntimeException: Unknown call signature for obj = new java.math.BigDecimal: object

JavaScript の bigdecimal.js ライブラリを使うときに数値じゃない値でインスタンス生成しようとすると例外が投げられるみたいです。

var bigdecimal = require("bigdecimal");
var obj = {};
 
new bigdecimal.BigDecimal(obj);
// java.lang.RuntimeException: Unknown call signature for obj = new java.math.BigDecimal: object

new bigdecimal.BigDecimal() の引数に渡す値はちゃんとチェックしてあげましょうというお話でした。


参考情報

how do i set a math context? · Issue #1 · iriscouch/bigdecimal.js

[JavaScript] java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result

JavaScript で浮動小数を計算する npm モジュール bigdecimal.js で、割り算を行う divide メソッド使ったらエラーが発生しました。

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result

JavaScript

続きを読む

[jQuery] .data() で整数が丸められることがあるので .attr() で取得する

jQuery の .data() メソッドで整数の桁数が多いと丸められることがあるので .attr() で取得しましょう。

jQuery

続きを読む

[JavaScript] js2coffeee で arguments が arguments_ に変換される

Js2coffeeで arguments が arguments_ に変換されて、気付かずに実行してエラーが発生しました。

arguments_js2coffee

JavaScript

arguments.callee

↓ js2coffeee

CoffeeScript

arguments_.callee

と変換したときに、アンダースコアが suffix に付いてしまったようです・・・


参考情報

arguments – JavaScript | MDN

arguments.callee – JavaScript | MDN

The Little Book on CoffeeScript – The Bad Parts

jQuery Countdown で日数だけ表示させるスニペット

jQuery Countdown で日数だけ表示させるスニペットをご紹介します。

var countDownEndDate = new Date('2015-01-01T00:00:00+0900');
 
$('#js-countdown').countdown({
  until: countDownEndDate,
  compact: true,
  compactLabels: ['', '', '', ''],
  format: 'D'
});

これで、カウントダウンする日数の部分だけ表示されます。


参考情報

jQuery Countdown

jQuery Countdown Reference

jQuery Countdownの時刻表示形式を変更する

jQuery Countdown の時刻表示形式を変更するスニペットをメモ。

例えば、10 Days : 20 Hours : 30 Minutes : 40 Seconds という表示形式にしたい場合は、下記のように書きます。

$(selector).countdown({
  separator_days: ': ',
  separator: ': ',
  label_dd: ' Days ',
  label_hh: ' Hours ',
  label_mm: ' Minutes ',
  label_ss: ' Seconds '
});

参考情報

kemar/jquery.countdown

[JavaScript] moment.js で日付型 Date のタイムゾーンを JST に変更する

JavaScript で日付扱うライブラリ moment.js で日付型 Date のタイムゾーンを JST に変更するスニペットをご紹介します。

Moment.js

続きを読む