愛と勇気と缶ビール

ふしぎとぼくらはなにをしたらよいか

JavaScript

JsDocにやさしいJSの書き方

最近、比較的真面目にJsDocを書くという機会があったので。 (※この記事の前提はJsDoc 3.2.2です) JSで適当に名前空間的なものを切ってコードを書いていくと、 /** * @class /* function Klass() { } Klass.prototype.foo = function () { }; my.name.space.K…

初めて真面目にChrome extension作ったのでチラ裏メモ

まだ公開してないけどね。 デスクトップ自体のアイドル(ユーザ操作がない)状態やロック状態はchrome.idleで取れる。ユーザ操作がないと判断するまでのtimeoutも自分で決められる。最短15sec。 Chrome自体からフォーカスが離れたかどうかはchrome.windows使…

2014年にもなってWebページをまともに印刷する方法も知らない俺たちは(あるいは、とあるウェッブエンジニアの闘いの記録)

前略、window.printという関数をJavaScriptから呼び出せば、めでたく印刷ダイアログが表示されて、今目の前に表示されているウェッブページを印刷することが出来るわけだ。 が、とりあえずこの機能をそのまま使うとおかしい。何やら色々おかしい。media="pri…

Chrome extensionでclipboardに文字列をコピー (2014/01/26時点)

なんか、やろうと思ってググったらみんな色々なこと書いてて何が正しいのかよくわからん!ムキー!ってなったので同じような人を救うために2014年1月時点での方法をメモ。あまり大した内容ではない。 manifest.json 現時点で必要なのは "clipboardRead" とい…

そろそろcreateObjectURLについてひとこと言っておくか

と思ったんだけど、書こうとしていたことは下の記事におおむね書いてあったので俺が一言いう必要はなかった。 createObjectURLとは何か? - NullPointer's Blog 新しめのAPIでURLを期待されるような場面では、createObjectURLで得られるBlob URLが使えるかど…

DOM Level 0 (ドラゴンボール・オラ・もて男・レベル・ゼロ)

オッス!オラ孫悟空!最近流行りのHTML5を追いかけてモテを目指すのもいいけど、DOM Level 0も堅実な男性ってイメージで素敵だよな! ところで、iframeにnameを指定してDOM Treeに追加した上で、同じnameを第二引数に指定してwindow.openするとブラウザは新…

2013年 Android 2.3系 Advent Calendar一日目

Event.prototype.stopImmedidatePropagationがない => ない場合は使わないことで回避 Hoge.prototype.delete = function() {}; みたいな記述でエラー => deleteがキーワードだから引っかかっているのだろう。これは本当は俺の書き方が悪いのかもしれない。 H…

Gruntfileの分割は大人しく.jsでやれ、.jsonでやるなという話

海外のblog等の内容を紹介して何事かを述べた気になるのは好きではないのだが、現状おおむね以下のような感じでいいのではないかと思っている。http://www.thomasboyt.com/2013/09/01/maintainable-grunt.htmlまあもっと他にいい方法はあるかもしれないが、…

メールのURLをクリックしたくないです

なんかこう、メールアドレスを入力させて、メールに書いてあるリンクをクリックしてユーザ登録してね!みたいなサービスがあるじゃないですか。ああいうのを自動化したい時って、もちろんPOP3とかでメールを取りに行ってもいいんだけど、GmailならGoogle App…

なんとかScriptがあと何個出てこようとあなたがブラウザ上でまともに動くコードを書けるようにならないワケ

JavaScriptよく分からないです><と言っている人はだいたい以下の要素のうち自分が何を理解していないのか分かっていないしそれら個別の要素についてちゃんと勉強する気もないのでJavaScriptにtranslateされる言語が今後いかに増えようともブラウザ上でまと…

Gruntをようやく使ってみた

Gruntってアレですね、JSでホゲホゲっと設定ファイルを書いてJSとかCSSのファイルをminify/unifyとかするヤツです。最近よく聞くので、機会があったら使ってみようと思っていたのですが、最近とあるウェッブページをPlay!Frameworkで作ってみたりしていたの…

canvasのgetImageData(), toDataURL()などにおけるCORSについて

僕のcanvas力はいまだ中学生男子並みなので、そもそもcanvasの一部のAPIにSame Origin Policy的なものが適用されることすら今日まで知らなかったのですが、どうやら違う生成元がsrcに指定されているimgをputImageData -> その描画領域をgetImageDataしようと…

Maintainable JavaScriptにみる、コンテキストとアプリケーションロジックの分離

個人的なこと 読書はいわゆる自己投資?にあたるものなのでケチるもんじゃないよなあ、とは思いつつも可能なら安い値段でより大きなリターンを得たいよねー、ということで最近はOreillyの半額セールに目を光らせるようになりました。英語は「拾い読み」がし…

ES5 features on iOS/Android's default browser

iOS, Androidのめぼしいバージョンのデフォルトブラウザについて、ECMAScript 5 compatibility table を使ってES5の対応度合いを調べました。既にありそうだなーと思いつつパッと見当たらなかったので。 どれもエミュレータで調べたものですし、特にAndroid…

DOMContentLoadedに引っ掛けて初期化を行う外部スクリプトを、DOMが出来てからアレアレする

だいたい以下のような感じでうまくいくんじゃないかと思うけど、ちゃんとした検証はしてないので。WebKitでしかみてませんし。引数のtargetはwindowやdocument, scriptはsrcが設定されたscript elementだと思いねえ。(※イベントハンドラ内でevt.targetとかを…

Google Apps Scriptで個人サービスの超絶ゆるふわ監視

さくらのVPSにも微妙に置きたくないし、かといって自宅のPCとか論外。そういう場合には便利かもしれない。環境整えなくてもメール飛ばせるし。以下のscriptをHour timerのtrigger(cronみたいなもの)で一時間おきに回すだけ。 function doCheck() { var url…

メモ

こんなのあったんですねーhttp://matome.naver.jp/odai/2132892555765887301

続 のび太とwindow.gc on Android

http://d.hatena.ne.jp/zentoo/20120501/1335848528↑この記事で、WebView#setJsFlagsが@hideなので、window.gcを使えるようにできないよーって書いてましたがよく考えたら、@hideだろうがなんだろうがreflectionを使えば問題なく呼べるので、以下の様なコー…

Google Apps Scriptが気合入りすぎな件

https://developers.google.com/apps-script/Google Apps Scriptっていうのは、JavaScriptでコードを書くとそれがGoogle先生のサーバサイドで何しか解釈されて動いて、Googleの各サービスのオブジェクトを簡単に操作できるぞオウイエ!ってやつです。そこま…

Event handling with anon-func style on iOS / Android

JavaScriptでユーザからのイベントを受け取ってホゲホゲ、という処理は大体次のようなスタイルで書く。なお、jQueryとか使っていても概要は同じ。 el.addEventListener("eventName", function(evt) { // do something }, false); iOS appでこのようなイベン…

AndroidのWebViewについての発表資料とか

前のエントリと内容が被っていてアレなのですが、AndroidでWebView(+ addJavascriptInterface)を使った場合に発生しうる脆弱性などなどについて社内の勉強会で発表した資料を公開します。割と具体的な攻撃方法っぽいことも書いてあるので、良い子はやらな…

AndroidのWebView#addJavascriptInterfaceは基本使わない方がいい、っていう話

基礎知識 Androidアプリケーションで埋め込みブラウザのようなものを実現するためのViewコンポーネントであるandroid.webkit.WebViewには次のようなシグネチャでaddJavascriptIntefaceというメソッドが生えています。http://developer.android.com/reference…

window.gc on Android?

http://sites.google.com/site/devcollaboration/codesearchAndroidのソースを↑で検索していて見つけたhttp://tools.oesf.biz/android-2.3_r1.0/xref/frameworks/base/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java#136windo…

JSONPのエラーハンドリング(この記事の内容は結果としてエイプリルフールになりました)

※めんどくさい && アホの証拠として残しておくため 消しませんが、ここに書いた方法だと200以外の404とかに対応できないです。つまりダメです http://d.hatena.ne.jp/NeoCat/20110206/1296934235これって結局、根本的には JSONPにおいては、200であっても「J…

Gmailのマルチアカウントを切り替えるためのVimpコマンソ

https://github.com/zentooo/rc/blob/master/.vimperator/plugin/gmail_switcher.jsつくった

Content Security Policy (CSP) についてちょっと調べたことのメモ

http://blog.monoweb.info/article/2012031523.htmlしばらく前に↑のblogで記事になった、Content Security Policy(以下CSP)についてのメモ。ちなみにCSP自体の仕様については、 W3Cのdraft (https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/cs…

LimeChat for Macのアレ

思い出した。社内の掲示板にはだいぶ昔に書いたんだけど。LimeChat for Macはユーザ定義のCSSやJavaScriptで見た目や振る舞いをカスタマイズすることが出来る(Preferences -> Theme)。JavaScriptのコード内でlocation.hrefを取ると、file://で動いていること…

jQueryオブジェクトを入れる変数の名前を$で始める話

前提として、何度も同じelementを操作するのに毎回 $("#your complicated.selector").css({"...":"..."}); とか書いてる奴はくたばれ。それは、参照するデータが同じなのに毎回DBに問い合わせてるのと同じだぞ。 $で変数名を始めるのはなんでキモいか 僕がjQ…

mixiをしていたごく普通のOLが、何故NodeListというフィールドに舞い降りたのか?

エントリのタイトルを考えるのが面倒になったので、ホッテントリメーカーで作成もしくはホッテントリメーカーで作成されたかのようなタイトルをつけることにしました。 getElementHogeHogeが返すのはliveなNodeListで、querySelectorHogeHogeが返すのはstati…

メッセージングでまあまあ捗るかもしれない話

この記事はJavaScript Advent Calendar(オレ標準コース)の13日めのエントリイになります。 ちなみに家に帰った瞬間、マシンの時計がずれて12/14になってて、大分一人で焦りました。てへぺろ。ぺろぺろ。この記事の題材はJavaScriptにおけるメッセージング(…