JavaScript

alertを出したいんだ俺たちは

利用者に対してメッセージを意識的に伝えたり、あるいは何かしらの行動を促すために、ダイアログボックスを表示するための機能がブラウザーには複数実装されている。alertの聖地、兵庫県出身者として、その手の機能を以下にまとめた。 機能 UIの占有など 機…

JavaScriptでbaseを指定して相対URLを絶対URLに変換する

メモがわり。 baseとなるURLを指定して相対URLを絶対URLに変換するには、ChromeやFireofxではURLUtilsを用いて以下のように書くことで簡単に実現できる。 var absolute = (new URL( "foo", "http://example.jp/bar/baz" ) ).href; // http://example.jp/bar/…

ブラウザ上でMarkdownを安全に展開する

不特定のユーザーが入力したMarkdownをブラウザ上でJavaScriptを使ってHTMLに変換するという場面においては、JavaScriptで変換してHTMLを生成するという処理の都合上どうしてもDOM-based XSSの発生を考えないわけにはいかない。かといって、Markdownをパース…

ECMAScript テンプレートリテラル

(自分用メモ) ES6のテンプレートリテラルを使うと、HTML生成におけるテンプレート的なものがJavaScriptでも書きやすくなる。 function safeHtml(){ var t = arguments[ 0 ].raw; var result = t[ 0 ]; for( var i = 1; i < arguments.length; i++ ){ result …

JavaScriptでリンク先URLがhttp/httpsか確認する方法

JavaScriptで動的にリンクを生成する際に、DOM-based XSSを防ぐためにリンク先がhttpあるいはhttpsに限定されていることを確認したい場合がある。典型的には以下のようなコードとなる。 var div, elm; // 変数 url は攻撃者がコントロール可能な文字列 if( u…

ブラウザ内で安全に文字列からDOMを組み立てるためのRickDOMというライブラリを書いた

RickDOM - ricking DOM elements safety from string https://github.com/hasegawayosuke/rickdom ブラウザ内のDOMParserあるいはcreatHTMLDocument APIを使って不活性なDOMを組み立てたのちに、必要な要素と属性、スタイルだけを切り出して複製しているので…

hiddenなプロパティを作る秘伝の方法

IE限定。よくわからん。 <script language="VBScript"> [abcd]=1 </script> ... <script type="text/javascript"> alert( window.hasOwnProperty("abcd"); // true alert( window.abcd == 1 ); // true alert( Object.getOwnPropertyNames(window).indexOf("abcd") ); // -1 !!! </script>

ブラウザでJavaScriptが動く時代がやってきた!

というわけで、昨日から話題沸騰の Javascript PC Emulator すごいですね。JavaScript で書かれた x86 PC エミュレータ上で Linux 動かして、入ってる tcc 使えばそこそこのソースもコンパイルして動いたり。 もとのディスク容量が少ないので、適当な母艦を…

初めてのnode.js

みなさんこんにちは (´・ω・`) 元気ですか?僕は元気です…。さて、node.js 流行ってますね!使ってますか? 僕も2日前から使い始めました。 とりあえず、教科書どおり書いたら、簡単にWebサーバ動きましたのでちょっと感動です!とりあえず、以下のコードを…

Re: Algorithm - 0と1を次々と返す簡単なお仕事

http://blog.livedoor.jp/dankogai/archives/51512419.html JavaScript で呼び出しの () が煩わしいなら、以下のように書けるのではないか。 #!/usr/bin/js var fl = { p : 0, valueOf : function(){ return this.p = !this.p; }, toString : valueOf }; pri…

顔文字でJavaScript

顔文字のJavaScriptを生成する aaencode を書いた。こういう↓JavaScriptが簡単に生成できる。 ゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚]…

JavaScriptで + - * = なしで記号だけでプログラムを書く

id:hoshikuzu さんが言ってたので書いてみた。こんな感じ↓。コードはすぐ書けたけど、この記事書くのに30分以上かかってる気がする。 javascript:(~~[])[<_>{/...$/({})[~~[]][~~[]]}{/../({})[~~[]][1]}{/...$/({}[{}])[ ~~[]][~~[]]}{/..$/(!{})[~~[]][~~[]]}</_>…

JavaScript変態文法最速マスター

Java変態文法最速マスター - プログラマーの脳みそをリスペクト。 JavaScriptの変態文法・技法一覧です。あんまり使わないけど、知ってるとXSSとか攻撃したいのにWAFに妨害されるなど、いろいろ制約があるという場合に便利。 文字列の生成 引用符を使わずに…

JavaScriptでアセンブラ書いた

JavaScriptでAjax風味な8086用のアセンブラを書きました。先日のまっちゃ139勉強会でLTが急きょ決まったので、発表直前まで書いていたのですがなんとか間に合いました。 Symbolic assembler demo <http://utf-8.jp/public/sas/> JavaScriptだけで書いていますので、ダウンロードさえす</http://utf-8.jp/public/sas/>…

JavaScriptで、複数の正規表現のどのパターンにマッチするかを switch で書く

JavaScriptで switch( s.match( ... ) ){ case /abcd/ : break; case /defg/ : break; } みたいに、文字列 s が複数の正規表現のどのパターンと一致するのかを switch 文でわかりやすく書く方法を考えていて、一致したパターンの見た目の分かりやすさも考え…

Using setInterval / setTimeout on WSH

さらに昨日の続き。いろいろ試してみると、昨日みたいに複雑なことをしなくても、window.setInterval などを呼び出すラッパ関数を作ってやれば、普通に setInterval や setTimeout も呼び出せました。というわけで、以下のような偽 window、偽 document を準…

Using jQuery.ajax on WSH with async:true

(2009-09-30追記: ↓こんな複雑なことしなくても、もっと簡単にできました。) 昨日の続き。WSH 上の JScript から jQuery.ajax を使えるようになったのはいいけれど、async : false でなければいけないのはやっぱりちょっと悔しいので、適当にごまかしてWSH上…

Using jQuery on WSH

jQueryを使うと、ajax 経由で取得した XML ドキュメントのような、ブラウザ(window,document)と切り離された対象でも簡単に操作することができます。例えば、リモートから取得したRSSであれば、以下のようなコードで各項目(item)のタイトル(title)やリンク先…

jQuery.ajax でリクエストをキャッシュさせない方法

jQuery.ajax を使ってGETでリソースにアクセスした場合、IEでは2回目以降のリクエストが実際には発行されずにキャッシュされた結果が使われてしまいます。これを防ぐには $.ajax( { url : "http://example.com/", cache : false, data : { a : "abcd" }, ...…

JSでthisをそのまま返す関数を作っておくと便利?

DOM操作では以下のように setAttribute してすぐメソッドを呼べない elm.setAttribute( "name", "value" ).getAttribute( "name" ); なので、引数の関数を実行してthisを返す関数を作ってやると Object.prototype.expr = function( method ){var args = Arra…

いろいろメモ@Firefox

配列の添え字にマイナスの値。 javascript:"abcde"[-1] // length javascript:(function(){ alert( arguments[-1] ) })(1,2,3) // argument.length javascript:(function(){ alert( arguments[-3] ) })() // toSource() windowの取得。直接 alert って書けな…

記号だけでJavaScript!

Gareth HeyesさんがHackvertorに hasegawa タグを追加してjjencode機能を実装してくれました! すげーーーーーー! ちなみに、単純に alert するだけじゃなく eval 相当なので好きなJavaScriptプログラムが記号だけで書けます! javascript:$$=-~-~[],$=-~$$,…

アルファベットに加えて数字も禁止でjavascriptを書きたい(未完成)

見落としてないよ。 アルファベット禁止でjavascriptを書いてみた - sub Diary (仮) …ね、簡単でしょう? お詫びというのも変だけど、もっと複雑にしてみた。これで、alert 出す JavaScript からアルファベットと数値を取り除けます(Firefox限定)。今は固定…

IEの .innerHTML で複数のスペースを入れる方法

IEでは <pre>.innerHTML に連続したスペースや改行を入れると、単一のスペースに置き換わってしまいます。 例えば次のようなJavaScriptをIEとFirefoxで実行してみると: var s = "0123456789ABCDEF\n a b c d"; var pre = document.createElement( "pre" ); pre.in</pre>…