JavaScript

Facebook ではてなスター

Facebook ではてなスターを使いたかったんだけど、 SiteConfig 書いただけだと HatenaStar Everywhere が満足に動かなかったので、ちょこっと user.js 等を書いたりした。 いるもの Greasemonkey http://s.hatena.ne.jp/js/HatenaStarEverywhere.user.js htt…

安全な HTMLDocument の生成方法について

何が危ないのか img.onerror や img.onload は src 属性の内容が評価された段階で実行されるので、外部ソースに対して HTMLDocument を構築する際などで、意図していないタイミングでスクリプトが実行されるケースがある。 具体的には、以下のような場合。 v…

apply/call での継承の話

この件について。 http://d.hatena.ne.jp/iskwn/20091215/1260828978 継承というかスコープがわかりやすいというのもメリットだと思うけど、カプセル化しやすいのも大きなメリットかなと思う。 function Foo(){} (function(){ var bar = 'bar'; this.bar = b…

JSCron よりもうちょっと Cron っぽいことをする

JSCron が Cron としてはかなりいまいちで不満だったので、適当にでっちあげてみた。 http://github.com/send/misc/blob/02d97e5ba9adbc124cf218d922e0a79fe262a6f2/js/cron.js if (!Array.prototype.indexOf) { Array.prototype.indexOf = function (elt /*…

いまどきのイベントハンドリングは遅いのかどうか問題

id:HolyGrail 周りで盛り上がってたので、ちょっと調べてみた。 DOMContentLoaded イベント使ったら、計測どころを何処にしていいかわからないので、それ以外の部分で。 昔ながらのやりかた。 <html lang="ja"> <head> <title>Test</title> </head> <body> <script> var start = new Date(); </script> <div> <ol> <li><a class="events" onclick="javascript:(function(){alert(1)})()">click!</a></li></ol></div></body></html>

DOMNodeInsertedIntoDocument イベントのクロスブラウザ対応試作

Firefox や、 Opera で DOMNodeInsertedIntoDocument イベントがあまりイケてなかったので、比較的マシな DOMNodeInserted イベント使って、似たような動きになるようなモノを作ってみた。 Firefox 2.0.0.12 と Opera 9.25 と Safari 3.0.4 で動作確認してま…

Mozilla24 出張Shibuya.jsでjQueryの話をしました。

反省点とか。 TAKESAKOメソッドでその場で資料を作ってたのでgdgdでした 調べる部分などはあらかじめ調べていたから良いかなと思ったら甘かった。 プロジェクタ等のチェックはやっておくべきだった。 フォントサイズとかコントラストとかレイアウトとかgdgd …

JS勉強会で話した内容

時間がなかったので、数分だけ喋った。ついでにFirebugの話だけじゃないよ。 以下の、htmlを題材に使った。 <html> <head> <title>send_のほーむぺーじ</title> <script type="text/javascript"> console.log("I hate %s !!!!","Safari"); </script> </head> <body> <div id="hoge"> <form> <input type="text" name="hoge" value=""/> </form> </div> </body></html>

new function(){}と(function(){})()の違い

(function(){})() の代わりに - IT戦記関連 カップリングとか言われたのでのっかりコネタ。 (function(){ this; // object global })() new function() { this; // object object } (function(){})() thisがglobal(ブラウザだったらwindowオブジェクト) retu…

Function.applyを使って、クラスをMix-in

Firebugのコードを読んでから、apply廚になりはじめている。 var Foo = function() { this.name = "Foo"; this.foo = "foo"; this.hage ="foo"; } var Bar = function() { this.name = "Bar"; this.bar = "bar"; this.hage = "bar"; } var Hoge = function()…

IEのスクリプト評価順

YUIのyahoo.jsとdom.jsをcreateElementしてdocument.body.appendChildしていくときに、IEだとYAHOOがundefinedでエラーになるという現象が時々発生する。これって、先にappendしたyahoo.jsより、dom.jsが先に評価されていないと起こらないはず。 それで、ふ…

オブジェクトが実行可能になったら実行するなんか

最近、ブログパーツに特化したJSフレームワークを作りはじめている。 んで、createElementなんかでscriptをloadした時とか、いちいちタイミング調整したりしてごにょったりするのが、嫌になって来たので、queueに登録しておいて定期的にチェックするようなの…

クロスブラウザ対応,コードに現れる意思

ベタでブラウザ判定しているJavaScriptのコードが嫌いだ。 なんで嫌いかと言うと、「判定しているブラウザには(意地でも)対応するけど、それ以外は知らねーよ。」というスタンスの表明に見えるからだ。 そして、そういうスタンスは、間違っているとは思わな…

Marqueeの動きを殺すBookmarklet

某所が余りにアレだったので。Firefox限定。 javascript:(function(){ var elems = document.getElementsByTagName('marquee'); for(var i=0;i

jiktoのソースコードゲットした

あとで読む。 [あとで書くかも]

Firefoxのmarquee実装

Shibuya.esの後のバカ話をふと思い出したので見てみたら、こんな感じでメソッドが付いてた。 $('foo').init(); $('foo').start(); $('foo').stop(); $('foo')._doMove(aSkipSettingNewPosition); メソッド叩いたら、普通に止まったり動いたりしたので、Fireb…

いつも似たようなデバッグコード書いてる気がする

ちゃんと作らないからいつも適当。 Safariでもconsoleのformatterを使わなかったら落ちずに行けるみたい。 var DEBUG = true; if(DEBUG && typeof console == 'undefined') { var elem = document.createElement('div'); elem.id = 'debug-console'; elem.st…

console.log取り忘れてた…

console.log入れっぱなしだったら、Safariが落ちるってのを何処かで読んでいたことをすっかり忘れてて、ド嵌りしてた。 ソース読み直して、入っているのに気がついて、消したら大丈夫になった。 もうちょっとデバッグ系上手くハンドリング出来るような何かを…

Shibuya.esでFirebugの話をしました。

スピーカ、スタッフの皆様お疲れ様でした。 中継してくださったi-revoさん、ウタゴエさんありがとうございました。 ご来場・視聴者の皆様、ありがとうございました。 今回初参戦だったわけですが、場の空気を事前に読めていなかったので、ものすごいアウェー…

Shibuya.js

http://shibuyajs.org/articles/2007/03/09/shibuya-js-technical-talk-3-shibuya-es itik!

安全なブログパ−ツ用のJavaScriptの埋め込み

いつも仕事で、他所様のJSに影響与えないようにとか悩んだりするんだけど、どうするのがベストかなあ。 はまちちゃんがiframeが良いって言ってて、確かにざっくり試してみたら、Prototype汚染しないし、親frameのオブジェクトとか全く見えないけど、frameset…

無断リンクを禁止する!

htaccess使えない人は、こういうことやればいいのかな? var Tinycafe = {}; Tinycafe.toppage = 'http://localhost/~kazuaki/tinycafe/'; Tinycafe.deny = [ 'http://localhost/~kazuaki/tinycafe/denied.html' ]; Tinycafe.allow = []; Tinycafe.check = fu…