うごメモはてな はてなのXSS脆弱性を発見したのでメモ。 http://ugomemo.hatena.ne.jp/movies?sort="><script>alert("XSS")</script>XSSは、クエリの値に xxx>\"'%0Aと入れて、Firefoxのソース表示でxxxで検索して壊れてる部分を探すとすぐ見つかる。 参考文献: http://d.hatena.ne.jp/xor0x35/20090327/p1
Pythonのrange(配列で返すほう)をJSで書く。 function range(from, to, step) { var i, a = []; if (typeof to == "undefined") { to = from; from = 0; } if (typeof step == "undefined") step = 1; if (step == 0) throw new TypeError("range() step argument must not be zero"); if (from < to) { if (step > 0) for (i = from; i < to; i += step) a.push(i); } else { if (step < 0) for (i = from; i > to; i += step) a.push(i); } re
s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+ Perlメモ の文字クラス部の範囲が重複していたので、重複を除去して短くしてくれる関数を書いた。ASCIIの範囲のみ対応。 function optimize(range) { var ascii = new Array(0x7f); var i, begin, end; var result = ""; for (i = 0x00; i < ascii.length; ++i) ascii[i] = false; for (i = 0; i < range.length; ++i) { begin = range.charCodeAt(i); if (range.charAt(i+1) == "-") end = range.charCodeAt(i += 2); else end = begin;
1 3 + 5 / 2 - 3 += 1.8のような式を計算する。整数の四則演算のみ対応。 RPN Calculator function calculateRPN(expression) { var result = 0; var stack = []; var i, c, n, m, x, y; var zero = 48, nine = 54; for (i = 0; i < expression.length; ++i) { c = expression.charAt(i); n = expression.charCodeAt(i); if (n >= zero && n <= nine) { m = 0; do { m = m*10 + n-zero; ++i; c = expression.charAt(i); n = expression.charCodeAt(i); } w
Workerに置いたWorkerの使用例について。 <!doctype html> <html> <head> <title>Worker</title> <style> pre { white-space: pre-wrap; } </style> <script>window.onload = function () { var view = document.getElementById("view"); var worker = new Worker("pi.js"); worker.onmessage = function (ev) { view.textContent = Number(ev.data).toFixed(20); }; };</script> </head> <body> <pre id="view"></pre> </body> </html> まず、new
最近流行のクリックジャックについて、メモ程度にまとめておく。 一言で言うと、外部サイトのボタンをユーザが間違えてクリックしてしまうように仕向けるテクニックが、クリックジャックである。 クリックジャッキングってこうですか? わかりませんではiframeをCSSのopacityプロパティを利用して透明にして、その下にダミーのボタンを置いている。目に見えているボタンを押そうとすると、その上に被せてある透明なiframeのボタンが押されてしまう。 [Sleipnir]No Click Jacking — Gistはこの攻撃に対する防御手段として考えられたユーザースクリプトで、透明なiframeを検出する。 しかし、opacity以外にもクリックジャックをする方法はあるので不十分である。 例えば 2009-03-04_2146 - javascripter's library にスクリーンキャストを
var XPath = { cache: null, reset: function () { this.cache = {__proto__: null}; }, get: function (context, expr, type) { var cache = this.cache, evaluator; if (expr in cache) { evaluator = cache[expr]; } else { evaluator = cache[expr] = XPathEvaluator().createExpression(expr, null); } return evaluator.evaluate(context, type, null); }, has: function (context, expr) { return this.get(context, expr,
prototype - 素人がプログラミングを勉強するブログの続き。RubyユーザがJavaScriptのオブジェクト指向を学ぶ時に使えるかもしれない。 =begin JavaScriptのようなオブジェクトの実装。 JSObject.newがJavaScriptのnew Object()相当であり、プロパティへの代入で値をセットする。 =end class JSObject < Object # Ruby1.9ならBasicObjectを継承すべき def initialize @object = {} end =begin JavaScriptのobject["key"]構文の実装。 objectのハッシュテーブルからキーで探し、無かったら"__proto__"プロパティから探し…と再帰的に動く。 "__proto__"がnilだったらnilを返す。 実体はprivate関数のref
Firefoxでdocument.readyStateがサポートされていた。確認したバージョンはMozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2a1pre) Gecko/20090124 Minefield/3.2a1pre。 document.readyStateで、document.readyStateがどのような値になるか一覧できるようにした Safariもdocument.readyStateがサポートされているけど、Firefoxとは返す文字列が違う。Firefoxの場合は uninitialized loading (DOMContentLoadedイベントが発生) interactive (loadイベントが発生) complete で、Safariの場合は loading (DOMContentL
前から作ってみたいと思っていた、Brainfuckのインタプリタを作った。 JavaScript Brainfuck interpreterに置いた。 id:lizanにデバッグを手伝ってもらったり、実装についてアドバイスを貰いながら、けっこう苦労して作った。 var brainfuck = function (source, getc) { var heap, ptr, cur, c, ret, stack, i, bracket, stack; heap = [0]; ptr = 0; cur = -1; ret = ''; stack = []; if (!getc) getc = function () { return prompt("input a character"); }; while ((c = source.charAt(++cur))) { switch (c) {
new Stringの用途を考え、ユニークなキーを生成するgensymを書いた。toString()があるのでobjectのキーとして使用でき、オブジェクトなので===で比較する時は絶対に重ならない。 var gensym = function () { var prefix = 'gensym_'; var id = 0; return function () { var str = prefix + id++; return new String(str); }; }(); var JSONP = function (url, callback) { var script, head, sym; sym = gensym(); script = document.createElement('script'); script.type = 'text/javascript'; scri
RubyのObject#tapがすごく便利。tapかわいいよtap - (rubikitch loves (Emacs Ruby CUI Books))に書いてある。これを使うと、selfを返さないメソッドを使ってもチェインできる。 JavaScriptだと、こんな感じ。 Object.prototype.tap = function (fn) { fn.call(this, this); return this; }; ただ、JavaScriptだとyieldブロックがないから、少し野暮ったい。もう少し動作を限定させて、 Object.prototype.tap = function (name) { this[name].apply(this, Array.slice(arguments, 1)); return this; }; [1, 2, 3] .tap('push', 4, 5
ArrowじゃなくてjQueryでもいいけど、下のようなものを動かしておくとFirebugのconsoleで動かせるようになって便利。 // ==UserScript== // @name ArrowLoader // @namespace http://d.hatena.ne.jp/javascripter/ // @include http* // @resource script http://github.com/motemen/arrow-js/tree/master%2FArrow.js?raw=true // ==/UserScript== var script = document.createElement('script'); script.type = 'text/javascript'; script.appendChild( document.createText
neat sxmlを、JavaScriptでやってみようとした。 with({__noSuchMethod__:function(){}}){ x(); // ReferenceError: x is not defined } がうまくいかなかったので、見た目が汚い。 function sxml2dom(list) { var tagName = list[0], childs = list.slice(1); var elem = document.createElement(tagName); for (var i = 0;i < childs.length;i++) { for (var j = 0;j < childs[i].length;j++) { var child = childs[i][j]; if (child[0][0] == "$"){ var str = chi
追記:MacのFirebugのF12は、Dashboardにショートカットを取られていただけだった。F12の割り当てをはずすと普通に動作する。 (function() { const TAB_SPACE = "\t"; var areas = document.getElementsByTagName('textarea'); Array.forEach(areas, function(textarea) { textarea.addEventListener('keypress', onKeyPress, false); }); function onKeyPress(e) { var textarea = e.target; if (e.keyCode == KeyEvent.DOM_VK_ESCAPE) { textarea.blur(); } else if (e.keyCode
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く