
ちょっと思うところあって JavaScript 内で、複数のファイル情報を作って Zip で固めて、 Data URI を生成するライブラリを作ってみました。 ソースは以下の zip.js です。 http://svn.coderepos.org/share/lang/javascript/Zip/ 使うには 以下の base64.js が必要です。 http://svn.coderepos.org/share/lang/javascript/Base64/trunk/ この base64.js は弾さんが作ったものです。 今回 Zip で使うように、ちょっとチューニングさせていただきました。 こんなことができます // zip オブジェクトを作る var zip = new Zip; // 文字列をファイルとして追加する zip.addString('Hello, world!!', '
はてなブックマーク(以下「はてブ」)がリニューアルされ、ブラウザからブックマークレットでブックマーク登録(以下「ブクマ登録」)しようとすると、図1の画面が現れるようになった。「こちらから再設定をお願いします」と指示されているが、この指示に従ってはいけない。ここで提供されている新型ブックマークレットは使ってはいけない。(この指示には従わなくてもブクマ登録はできる。) 新型ブックマークレットを使用すると図2の画面となる。ブクマ登録しようとしているWebサイト(通常、はてな以外のサイト)上に、はてブの画面のウィンドウが現れている。これは、Ajaxと共に近年よく使われるようになった「ページ内JavaScriptウィンドウ」である。(ポップアップウィンドウとは違い、ウィンドウをドラッグしてもブラウザの外に出すことはできず、あくまでも表示中のページ上のコンテンツであることがわかる。)
Javascriptではwait処理はない。 でも、ある処理Aが完了した後に、処理Bをして欲しい場合が往々にしてある。 例えば、以下のような処理。 var a = func1(); func2(a); 通常の場合だと、この処理はfunc1 → func2と処理される。 だけどfunc1の中で、setTimeoutやsetIntervalが利用されてると、 うまくいかないケースがある。 例えば、以下のケースを実行すると var a = 0; function func1(){ if( a < 10){ a++; alert("hoge" + a); setTimeout("func1()", 500); } else{ alert("END"); return a } } function func2(val){ alert ("call func2: " + val); } var val
javascriptで動的なUI等を書くと、どうしてもネックになるのが、HTMLノードの表現、その整理法だ。少なくとも私はそうだ。 pagmo書いていたときなど、コードのかなりの量をHTMLノードの記述に使っている。 しかし本質的には重要なコードではないので、なるべくコンパクトに書きたい。ただ単にテキストで作って、それをinnerHTMLとかで流し込むのは、コードが汚くなるし、ソースの見た目もきたなくなるしいやだ。(短い場合は速度が速いらしいが) common lispやschemeなどでは、S式で表されるリストをつかってデータ構造とし、それをHTMLに変換することをよくするようだ。 たとえば以下のようにする。 (defun standard-page (&key title body) (let ((pbody (cond ((atom body) (list body)) ((atom
今読み返すと、あちこちに変な日本語が混じっていますね。 訂正するのも嫌らしいのでそのままにしておきます。 はてなブックマークというサービスで、当エントリーに対してついたコメントに返信していきます。 このエントリーには、「XSSの危険性をわかっていない人に理解してもらう」というのが前提としてありました。 そして、「技術の疎い人にも理解して動いてもらう」という願いもありました。 このために、「多少の誤解を与えたとしてもなんとなく理解してもらう」事を重要視しています。 これを踏まえて以下記述します。 「#」ではじまるのがはてなブックマークのコメントです。 #2008年10月24日 g616blackheart ガードが堅いと言われた……どうしてだろう? #2008年10月24日 anigoka なんかガードが堅いて言われちゃったんだけど、なに,オレが非コミュだって言いたいの!? 申し訳ないです。
Web ページの選択範囲に含まれるリンクを取得する方法として、Piro さんによる DOM 2 Range の compareBoundaryPoints メソッドを使ったやり方があります。これはリンクを探すのに DOM Core の機能を使って文書ツリーをたどっていますが、今現在ノードを探すといわれて真っ先に思いつくのは XPath でしょう。そこで、XPath を使って選択範囲のリンクを取得する方法を考えてみました。もちろん、選択範囲を扱う以上 DOM 2 Range も利用します。 基本的な考え方 Range オブジェクトの取得 選択範囲の始点より前にあるリンクの数の取得 選択範囲の終点より前にあるリンクの取得 選択されているようには見えないリンクの除外 まとめ 基本的な考え方 基本的なアイデアは、選択範囲の終点より前にあるリンクで、選択範囲の始点より前にはないものが求めるリンクとい
行動ターゲティング広告は以前から存在していたが、今年の動向として新しいのは、行動を追跡する手段として、自サイトでの閲覧行動だけでなくよそのサイトでの閲覧行動まで追跡するタイプが現れたことだ。 (~中略~) 仕組みはこうだ。Webページのリンクは標準では青色で表示されるが、訪問済みのリンクは紫色に変わる。このリンクの表示色をJavaScriptなどのプログラムで取得することができれば、閲覧者が特定のサイトに行ったことがあるか否かを調べることができてしまう。 <style type="text/css> #sita-A a:visited{background:url("/beacon/site-A.gif")} #sita-B a:visited{background:url("/beacon/site-B.gif")} </style> <ul> <li id="sita-A"><a hr
document.evaluateと名前空間がわからない - by edvakf in hatenaへのレスです。 document.contentTypeが"application/xhtml+xml"の場合、名前空間があるので、通常のXPathでは要素を取得できません。resolverとprefixが必要になります。*1 で、m.twitterはHTTPヘッダーで Content-Type: application/xhtml+xml; charaset=UTF8; charset=utf-8を返しているので、XMLとして扱われ、そうでない大抵のサイトはHTML上でXHTMLを宣言していても、text/htmlで返すので、HTMLとして扱われます。 Content-Type: text/html; charset=utf-8繰り返しですが、 namespace がある Document
概要 MJL (MITSUE-LINKS JavaScript Library)は、ミツエーリンクスで標準利用されるJavaScriptライブラリです。 MJLは弊社内における業務効率を改善するために、統一された設計思想、利便性の向上を念頭においた上で設計・開発されました。 MJLは他のJavaScriptライブラリ群とは異なる設計思想により、独特の特徴を持ちながらも他のライブラリと補完しあえるものを目指しました。 MJLはコピーレフトライセンスであるGNU GPLに基づく自由ソフトウェア(フリーソフトウェア)です。弊社は GNU GPLに則り、本ページにてMJLの全ソースコードを公開します。 ライセンス MJLはGNU GPL Version 3(参考邦訳)のもとに提供されます。 詳細はMJL本体ファイル内のライセンス告知をご覧ください。 ダウンロード MJL本体(圧縮版) mjl.js
ブラウザに関する話が聞けるということで第 13 回 Admintech.jp 勉強会に行ってきました。他の勉強会 (といっても私の場合は Kanasan.JS がほとんどですが) と比べると、Admintech.jp 自体が ITプロ(システム管理者やネットワークエンジニア)向けのコミュニティということもあってか、学生が少ない印象を受けました。また、参加者のノートパソコンを見渡すと、会場 (マイクロソフト大阪オフィスセミナールーム) のせいではないでしょうが近年ではまれに見る Mac 率の低さだったようです。 IE に依存した Web アプリケーションセキュリティ はせがわようすけさんによる、IE 以外のブラウザでは問題ないが、IE では XSS につながるパターンの紹介でした。発表資料ははせがわさんの記事から参照できます。 文書の文字符号化方式を UTF-7 や US-ASCII と誤認
IEでは <pre>.innerHTML に連続したスペースや改行を入れると、単一のスペースに置き換わってしまいます。 例えば次のようなJavaScriptをIEとFirefoxで実行してみると: var s = "0123456789ABCDEF\n a b c d"; var pre = document.createElement( "pre" ); pre.innerHTML = s; document.body.appendChild( pre ); IEの表示: Firefoxの表示: IEでは、複数の連続したスペースや改行文字が全て単一のスペースになってしまっています。改行文字を "<br>"に置き換えて、createTextNode() すれば解決しそうな気もしますが、 var s = "<span style=\"color:red\">0123456789ABCDEF<
以下、郷田ほづみの声でお読みください。 オレの名は「ジェイ・スクリプト」。20世紀最末期の「第一次ブラウザ戦争」でエース部隊に徴用され、最前線で殺戮を繰り広げた。オレたちに課せられた課題は重大だった。相手方ブラウザの殲滅。オレたちはマイクロソフト帝国の最新鋭上陸艦「IE4」に搭載され、次から次へとコードを実行した。戦いは熾烈を極めた。オレたちはどんな汚いコードでも動いた。カーソルをクマさんに変える。アイコンを点滅させる。今日のお知らせをポップアップさせる。世界時計をスクロール表示させる。それが果たして本当にそのウェブページに必要なユーザビリティなのかを問うこともなかった。しかしいつしかオレたちは気づいた。敵艦「NN4」に搭載されているのもオレたちとまったく同じスクリプトなのだと。やがてオレたちが属する帝国が領土のほぼ九割を制圧するに至り、戦争は膠着状態にはいった。敵国は壊滅されたかに見えた
以下のエントリで質問を頂いたので http://d.hatena.ne.jp/amachang/20080827/1219815788 以下のコード x + a - (x % a || a) やりたいこと a で x を丸めること こんな感じ function round(a) { return function(x) { return x + a - (x % a || a); } } var round10 = round(10); round10(10); // 10 round10(15); // 20 round10(20); // 20 round10(25); // 30 もっといい方法あるかなあ (function(b) { return b ? x - b : x; })(x % a) うーん どっちにしろ奇麗には書けないなあ
2008年9月5日 MJL - MITSUE-LINKS JavaScript Library フロントエンド・エンジニア渡邉 卓 MJL とは何か? 実は、私が設計・実装を担当し、弊社内で開発が進められてきたJavaScriptライブラリの略称です。このMJLこと MITSUE-LINKS JavaScript Library はこの度、弊社内の標準ライブラリとして運用が開始されることになりました。 本コラムでは、MJLの生い立ち、JavaScriptライブラリの現状、特徴、これからの展望について簡単に述べていきます。 生い立ち - 業務効率の改善がもたらすサービス品質の向上 MJLが生まれたきっかけはずばり、「業務効率の改善」を図るためでした。 従来は、案件の担当者ごとにさまざまなライブラリを利用しており、利用されるノウハウ、実装、バージョンがまちまちになることがよくありました。 社内
はてなブックマークのコメント一覧非表示機能について - はてなブックマーク日記 - 機能変更、お知らせなど 先日リリースされた、はてなブックマークのコメント一覧を非表示する機能ですが、 テクノロジー : 日経電子版 こちらのタイトルのように、微妙に誤解されてるようなのでちょっと分かりやすく解説してみました。 実際に非表示設定にしている例 おはようからおやすみまで くらしに競馬を広げる はてなブックマークのコメント一覧非表示機能テスト - ネットランダム改 はてなブックマークのコメント一覧非表示機能について、ブックマークされる側より。 - Attribute=51 こちらを見てみると、一目瞭然なのですが、ブックマークしているユーザーとそのコメントが従来と異なり表示されていません。 ですが、これは ブックマークのコメントそのものが誰からも見れないということではありません 例えば、私が非表示の設
追記:コメント欄で指摘されたように、下のコードではイベントリスナは削除されなかった。 DocumentFragmentに一旦ストックすると、登録したイベントリスナは削除される。cloneNode、innerHTMLなども同様。 つまり、下のようなコードを書いて、ドキュメントをクリックしても、"click!"とは表示さない。 document.body.addEventListener("click", function(){ (console.log||alert)("click!"); },false); var df=document.createDocumentFragment(); df.appendChild(document.body); document.documentElement.appendChild(df); 不特定のサイトで動作するGreasemonkeyスクリプ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く