JavaScript

メソッド実行時の引数に関数代入の挙動

window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…

Array.isArray

Firefoxでしか確認してないけど、Array.isArrayメソッドの優位性を知ったのでメモ。 <iframe id="testFrame" src="about:blank"> var iframe = document.getElementById("testFrame"); var doc = iframe.contentDocument; var s = doc.createElement("script"); s.textContent = "var hogehoge = [0,1,</iframe>…

WeakMap使いたい!

id:mooz さんが WeakMap のスライドを作っているのでWeakMapについてはそちらを。または、より激しいのはLet's WeakMap - 枕を欹てて聴くをwPanoという拡張機能で、Firefoxのタブをグループ毎にツリー表示しているが、タブとグループのインターフェースとし…

ドキュメントの最大スクロール値を得る

window.scrollTo(x, y)でJavaScriptからスクロールできるわけだが、x,yの最大値を得る方法を探った。 Mozilla 一番簡単。 window.scrollMaxX; window.scrollMaxY; というプロパティがある。これを利用すればOK GoogleChrome ChromeにはscrollMaxX,scrollMaxY…

ページ内リンクにスムーズスクロールしつつpushState

ページ内ジャンプのリンクでスムーズスクロールしたい 同時にlocationも弄ってハッシュ値を付ける&「戻る」/「進む」を可能にしたい window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.get…

Firefox Aurora(8.0a2) の Parser API で関数をパースしてみた結果からの予想

主に拡張機能での話しだが、Firefox 8 くらいから Parser API というものが導入されている。 https://developer.mozilla.org/en/SpiderMonkey/Parser_API 何かって言うと、JavaScriptソースコードを構文解析するものである。詳しくは上記リンク先を。基本的…

JavaScriptの関数(ラムダ関数とかクロージャーとか)

知ってて当然?初級者のためのJavaScriptで使う即時関数(function(){...})()の全て - 三等兵 はてなブックマーク - 知ってて当然?初級者のためのJavaScriptで使う即時関数(function(){...})()の全て - 三等兵 知ってて当然?初級者のためのJavaScriptで使う…

Unicode ⇔ UTF-8バイト列なコード

vs UTF-8, UTF-16, UCS4 - 枕を欹てて聴くを読んだは良いけどやってみないと良く分からん>< あ〜んどプログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)作者: 矢野啓介出版社/メーカー: 技術評論社発売日: 2010/02/18…

ES Harmony の Proxy と WeakMap を使ってプライベート変数(プロパティ)を作る

Firefox 6.0a1 の話。なんか、FirefoxってECMAScript.nextの実験台になっている気が...w http://wiki.ecmascript.org/doku.php?id=harmony:proxies Proxyとは、なんていうかECMAScriptの内部関数をJavaScriptで再定義できる感じのもの。 Firefox 4.0から使…

クラスもどきを作るライブラリを作ってみた

newを封印して、JavaScriptでオブジェクト指向する(1) - 泥のように newを封印して、JavaScriptでオブジェクト指向する(2) - 泥のように newを封印するべき4つの理由 - 泥のように あたりを読んで、たまにはライブラリ的なものを作ってみようと思い立って作…

Firefox Nightly:: XMLHttpRequest の readyState 値

Firefox 6.0a1 (Nightly) にて、 Bug 649133 – Implement XHR2 responseType/response attributes mozilla-central: changeset 69304:618cad1b1743 が反映されてきてる。このバグの目的としては http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-respon…

XMLHttpRequest Level 2

Firefox Nightly:: XMLHttpRequest の readyState 値 - hogehoge @teramako の続き、かな。 前のはいきなり枝葉に走ってしまったが、Bug 649133 ? Implement XHR2 responseType/response attributes によって、まだドラフトだけどXMLHttpRequest Level 2が実…

XMLHttpRequest.onreadystatechange に入れる関数の引数

何か発見した。 var x = new XMLHttpRequest; x.open("GET","/", false); x.onreadystatechange = function(event) { alert(event); }; x.send(null); とやるとどうなるか。 Eventオブジェクトが取れる! event.targetはXMLHttpRequestのインスタンス! wind…

let がブロックを作ってくれない?

Mozilla JavaScriptの話 var o = {}; for each (let val in ["a","b","c"]) { o.__defineGetter__(val, function (){ return val; }); } 結果 o.a; // "c" o.b: // "c" o.c; // "c" になってしまう。letで書いているからいけると思ったのに。 var o = {}; fo…

ECMAScript 5th 的 LazyGetter

ECMAScript 5th から正式に getter/setter が作れるようになったわけだが、これはMozilla の JavaScript である SpiderMonkey では前々から実装されていた。 { get foo() { return ...; } } { set foo(val) { return ...; } } に加え、 Object.prototype.__d…

Firefox4 と Chrome, Safari の ES5 実装

Hello, I discovered that the following ES5 code evaluates differently in FF4 than Chrome and Safari. function Ctor() {}; Object.defineProperty(Ctor.prototype, "prop", { value: "prototype", writable: false }); var obj = new Ctor(); obj.prop…

ECMAScript 5th の Arguments オブジェクト

まあ、"use strict";しろやハゲってことなんだろうけど...。 JavaScript Argumentsオブジェクトの挙動 - jsdo.it - Share JavaScript, HTML5 and CSS 関数中にargumentがあるかどうかで挙動が変わるというものを発見してしまったのだ。 上記、jsdo.it でやっ…

ああ、それは in 演算子ではなく for-in 構文です...

in演算子の使用法:続JavaScriptのオブジェクトについて - builder in演算子の使用法:続JavaScriptのオブジェクトについて - page2 - builder やぼなツッコミだと思いつつ。 in演算子は、こちらのforループとともに用いる用法が一般的です。 in演算子の使用…

JavaScriptで名前空間

Firefox4のJavaScriptと言えば ECMAScript 5th ECMAScript Harmony E4X ですよね。で、昨日辺りにJavaScriptの名前空間に関してTwitter上で話題に上がっていたので自分もやってみた。 参考 ES Harmony の Proxy について #fxdevcon で LT してきました - moo…

in 演算子と obj.hasOwnProperty() はどちらが早い!?

window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…

SpiderMonkeyのgetterとsetter

Where's Walden? ≫ More SpiderMonkey changes: ancient, esoteric, very rarely used syntax for creating getters and setters is being removed 2010-04-16の記事で知ったのは今日という、自分の情報収集能力のダメさを感じている。MozillaのJavaScript実…

use strict 怖い

Perlの話ではない、JavaScriptの話なのである。あと、タイトルはまんじゅう怖い的な意味なのである ECMAScript 5 strict mode in Firefox 4 ? Mozilla Hacks ? the Web developer blog Firefox4.0b10pre に ECMAScript5 の Strict モードが実装されましたー…

Node.compareDocumentPositionが素晴らしい

window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…

求む。インスタンスをArrayで拡張する方法

Arrayインスタンスを拡張したい。 prototype汚染はさせない Array.prototypeの上書き禁止 Arrayオブジェクトと同じ挙動 という条件。下記、EXArrayというコンストラクタをArrayの様な扱いにしたいわけだ。 テストコードでも書いているが instanceof obj inst…

ここ2〜3日の調査結果

http://femo.jp というサービスがあったなーと思って、ここ2〜3日の調査結果を書き込んでおいた http://femo.jp/teramako/2010/09/26 teramako : Windowsのドライブリストを得る 一番悩んでいた問題。一番上位のディレクトリのリストが欲しかったのだが、Win…

Twitter の XSS 関連、E4Xで作れば問題無し!

Kazuho@Cybozu Labs: (Twitter の XSS 脆弱性に関連して) 構造化テキストの正しいエスケープ手法について 404 Blog Not Found:構造化テキストの間違ったエスケープ手法について XSSしないやつ - zorioの日記 ボクも一応Twitterクライアントを作っているので…

E4Xのバグ (SpiderMonkey) を発見してしまったかもしれない

default xml namespace = ""; var ns = new Namespace("xhtml", "http://www.w3.org/1999/xhtml"); var x = <ul xmlns="http://www.w3.org/1999/xhtml"> <li>hoge</li> </ul>; <ul xmlns="http://www.w3.org/1999/xhtml"> <li>hoge</li> </ul>; x.appendChild(<li>foo</li>);

pre 要素の中身をエスケープせずに書く

<pre> var x = <root> <list>hoge</list> </root>; for (var i=0; i < x.*.length(); i++){ hogehoge(x.*[i]); } </pre> とか基本エスケープせずに書きたい。 ついでに 文頭、文末の改行のみの部分は削除しておきたい 先頭のインデント部分の空白部分は削除しておきたい <pre> var x = <root> ... ]]></pre> CDATAセ…

変なJavaScript (+ E4X)

最近、E4X の勉強をしている(仕様はStandard ECMA-357ね)ご存知の通り(?) Mozilla の JavaScript *1には E4X が使えるのだが、いろいろ罠チックなものがあったり、ECMAScriptの仕様を壊してしまっていたりと面白い(ぉ const XHTML = new Namespace("xhtml…

ペルソナの独自配布

Distribute Personas Lightweight themes - MDCを参考にスクリプトを書いてみた。これで皆もペルソナの独自配布が出来ますね!といっても信頼できないサイトからインストールするのは微妙な感じだけどね。画像はCanvasで背景(星屑)テストをテキトウにキャプ…