愛と勇気と缶ビール

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

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

オッス!オラ孫悟空!最近流行りのHTML5を追いかけてモテを目指すのもいいけど、DOM Level 0も堅実な男性ってイメージで素敵だよな!

ところで、iframeにnameを指定してDOM Treeに追加した上で、同じnameを第二引数に指定してwindow.openするとブラウザは新しいwindowじゃなくてさっき追加したiframeでURLを開こうとするんだ。これ、ベジータは知ってたか?

http://jsdo.it/zentooo/3POo

2013年 Android 2.3系 Advent Calendar一日目

Event.prototype.stopImmedidatePropagationがない

=> ない場合は使わないことで回避

Hoge.prototype.delete = function() {}; みたいな記述でエラー

=> deleteがキーワードだから引っかかっているのだろう。これは本当は俺の書き方が悪いのかもしれない。 Hoge.prototype['delete'] = function() {}; と書くことで回避

location.originがない

=> このへんのpolyfillで回避

Android2.3でもなんでもないが、iOS5.0のSafariもCSPが中途半端に実装されてしまっているので早くこの世から消えてほしい(この手のものは、中途半端に動いているより動かない方がマシである)

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

海外のblog等の内容を紹介して何事かを述べた気になるのは好きではないのだが、現状おおむね以下のような感じでいいのではないかと思っている。

http://www.thomasboyt.com/2013/09/01/maintainable-grunt.html

まあもっと他にいい方法はあるかもしれないが、あまり汗水垂らして頑張りたい部分でもなく。


上記blogの方法だと、loadConfigっていうfunctionを用意する部分が微妙にゴニョっとしていて嫌だなあ、と思って当初は「まあどうせgrunt.initConfigに書くのって構造化データだけだから(注:後にfunctionを書くことになった).jsonにconfigを分割してみたのだが

  • gruntのloadJSONは(当然ながら)正しいJSONを期待してパースするのでケツカンマとかが通らない
    • めんどくさい
  • keyをちゃんとダブルクォートしないといけない
    • めんどくさい
  • しかもエラった場合にどの部分がJSONとしてinvalidなのか分かりにくい
    • 超絶めんどくさい

という事情があったので、.jsonはやめて大人しく.jsに分割することにした。

node上で動く何かであるとか、要はJSONではなくJavaScriptそのものを評価できる環境ならば設定ファイル的なものは.jsonで書くより.jsで書くほうが幸せになれるだろう。

なぜなら、validなJSONを手で書くのは苦行だからだ!

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

なんかこう、メールアドレスを入力させて、メールに書いてあるリンクをクリックしてユーザ登録してね!みたいなサービスがあるじゃないですか。

ああいうのを自動化したい時って、もちろんPOP3とかでメールを取りに行ってもいいんだけど、GmailならGoogle Apps Scriptでメールの内容を取れるので、それを利用して単にHTTPでGETするだけでクリッコすべきURLが取れるWebアプリもどきを作ることが出来ます。

function getRegisterURL() {
  // 特定のワードでメールを検索して、先頭のを取り出して
  var threads = GmailApp.search("[service name]");
  var thread = threads.shift();
  var mail = thread.getMessages()[0];

  // 正規表現で適当にURL抜き出して
  var body = mail.getBody();
  var matches = body.match(/http:\/\/.+(?=<br)/);
  var registerURL = matches[0];

  // 次のに備えてこのメールは消して...
  mail.moveToTrash();

  // URLを返す
  return registerURL;
}

// Google Apps Script (WebAppとして公開) では、doGetで返したものがレスポンスになる
function doGet() {
  return ContentService.createTextOutput(getRegisterURL());
}

Googleアカウントのセッションなしでこれを取るためには結局誰でも見られるように設定するしかないので、色々ザルであることに注意してください。

良い子は悪いことに使っちゃだめよん。

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

JavaScriptよく分からないです><と言っている人はだいたい以下の要素のうち自分が何を理解していないのか分かっていないしそれら個別の要素についてちゃんと勉強する気もないのでJavaScriptにtranslateされる言語が今後いかに増えようともブラウザ上でまともなコードを書けるようになる確率は低いと思われます。(現在のブラウザ/JavaScriptアーキテクチャその他に根本的な変化があるような場合を除く)

  • JavaScript言語そのものを理解していない -> これがある程度AltJS言語で解決される
  • JSがブラウザ上でどういう風に実行されるかを理解していない
  • DOMを理解していない
  • ブラウザにおけるEvent Modelを理解していない

僕はそもそも古参のJavaScripterではないしJavaScripterを名乗るのはおこがましいレベルの人間だと思っていますが、古参のJavaScripterが「AltJS言語があればJavaScriptなんて書かなくていいぜヒャッハー!」という風潮に感じる違和感の主たる原因ってこのあたりにあるんじゃないかなーと思っていたり。