やったこと

webサービスを作るときに考えたことを垂れ流します

プログラミング

ニコニコ外部プレイヤーのステータス

ニコニコ外部プレイヤーのオブジェクトは"external_nico_0"のidを指定すると取得できる。 var player = document.getElementById("external_nico_0"); ニコニコ外部プレイヤーの状態は、ext_getStatus()メソッドを叩くと取得できる。 var status = player.ex…

タイマーを使ってwindow.openするとポップアップブロックされてしまう

setTimeoutを使って、一定時間経過後に新規ウィンドウを開く処理(window.open)を書いたら、ブラウザのポップアップブロックが働いて開くことができなかった。 どうやらセキュリティ上の観点から、ユーザ操作によらないタイミングでwindow.openしようとする…

javascriptでx文字目を置換する方法が分からん

javascriptで、文字列のx文字目を置換する方法が分からんかった。ググっても方法が見つからない。仕方ないから、下記みたいにして強引に文字を置き換えた。 (tesの3文字目の"3"を"a"に置き換える) var tes = "12345"; var tes2 = tes.slice(0, 2) + "a" + …

forEachとspliceを同時に使ったときの動作

javascriptで、forEach(配列の全要素に対して処理を実行する)とsplice(配列のある要素を削除する)を同時に使ったらどうなるか試してみた。お試しコードは以下。 var tes = ["1", "2", "3", "4", "5"]; tes.forEach(function(value, index){ if (value ==…

Chromeのコンソールはconsole.log呼び出し時の値が出力されるわけではない

Chromeのjavascriptコンソールでデバッグしてたら、予想外の値が入っててちょっと混乱した。例えば以下みたいなコード。 //Tesクラス生成 function Tes(){ this.a = 1; this.b = 2; }; var tes = new Tes(); //配列cに格納 var c = []; c[0] = tes; //cをロ…

javascriptのforEachスキップするときはcontinueじゃなくてreturn

javascriptのforEachで配列を全部舐めて処理するとき、途中でスキップしようと思ってcontinueしたらエラーして怒られた。しばらく調べてみたら、forEachの途中でスキップするのはcontinueじゃなくてreturnだった! tes_array.forEach(function(value){ if (v…

ajaxでニコニコのコメントを取得 & 応答結果をパースする

ニコニコAPIには動画のコメントを返却してくれる機能がある。以下のようにニコニコ・コメントサーバに対してpostリクエストを送ると、動画のコメントを返してくれる。■ニコニココメントサーバ・URL http://msg.nicovideo.jp/10/api/ (※取得したい動画によっ…

ニコニコAPIを叩いてゲットした情報をjsonで返却するスクリプト

ニコニコのgetflv APIを叩いて情報ゲットして、クライアントにjson形式で返却するphpスクリプト作った。「http://hogehoge.php?id=sm12345678」みたいに、GETで動画IDを指定して使います(sm****が動画id)。クライアントに「スレッドID」と「コメントサーバUR…

phpのgoto文はバージョン5.3以降じゃないと使えないのか

phpでgoto文を書いたらエラー吐いて実行できなくて困った。なんでだろうって思って調べてみたら、phpのgoto文はバージョン5.3以降じゃないと使えないっぽかった!php5.3は、2009年6月30日にリリースされたバージョンっぽいから、かなり最近入った機能なのね…

ニコニコ外部プレイヤーを動的に読み込むのむずいな

ニコニコ動画は、以下のようなjavascriptコードを張ると外部サイトからも閲覧することできる(ニコニコ外部プレイヤー機能)。 <script type="text/javascript" src="http://ext.nicovideo.jp/thumb_watch/sm23942482?w=490&h=307"></script> この外部プレイヤーを、ページに対して動的に追加しようと思ったんだけど、どうもうまくいかない(上記のscriptをappendChildで…

canvas要素で画像をつぎはぎ表示すると境界線が見えてしまう

htmlのcanvas要素で、大きな画像を4分割してつぎはぎ表示しようとしたら、つぎはぎの境界線が表示されてしまって困った(白い線みたいのが見えてしまう)。Chromeでは境界線が表示されないのに、IEとかFireFoxでは境界線が表示されてしまうようで、発見が遅…

Mobail Safariのcanvas drawImageは元サイズより大きなパラメータ入れてはいけないみたい

canvas要素で画像を表示させようとしたら、PCブラウザでは表示できるのに、Mobail Safariでは表示できないケースがあって手こずった。以下のようにコードを書くと、Mobail Safariだと画像描画できなくて真っ白になってしまう。 var canvas = document.create…

htmlのcanvas要素で大きな画像がうまく表示できない

htmlのcanvas要素ででかい画像表示しようと思ったらうまくいかなくてはまった。↓こんな感じで画像を縮小表示させようとしたら、300px * 150pxくらいの画像の切れっ端しか表示されない。 var canvas = document.createElement("canvas"); var context = canva…

cronでphpのスクリプトを叩くときはパスの表現に注意!

cronで定期的にphpのスクリプトを叩こうとしたら失敗してしまった。手元で直接phpを実行したときはエラーが起きなかったのに、cronでphpを実行するとなぜかエラーが発生してしまう。これはphpコード中のパスの書き方が悪かったせいだった!コード中にfile_pu…

window.openでDataURL形式の画像が表示できない

DataURL形式の画像を、以下みたいにして新ウィンドウ(window.open)で表示させようと思ったら、できなくて手こずった。 var dataUrl = canvas.toDataURL('image/jpeg'); window.open(dataUrl); このコードはChromeやFirefoxでは動くけど、IEでは動かない(IE…

ブラウザでwindow.openの挙動が違うな

クロームでは、以下コードで新規ウィンドウを開くことができる。 ↓ window.open(url, null);でもこのコード、firefoxの場合だと新ウィンドウじゃなくて、今のウィンドウと置き換えで開く動作になってしまう。こう書くとクロームでもfirefoxでも新ウィンドウ…

いきなりvimでEscキーが効かなくなった、犯人は・・・

いきなりvimでEscキーが効かなくなった。 何も設定いじってないのに、まったく理解できないよ。。同じ症状がないかしばらくググってみたら原因らしきものを発見。 なんと犯人は・・・Photoshopだった!うわー、これはわからないわ。。たしかにさっきPhotosho…

javascriptで関数に参照渡しできなくてびびった

javascriptで関数に参照渡しで変数をセットしようと思ったらできなくてびびった。javascriptは関数に入れる引数は通常値渡しになるらしい。引数に参照渡しを使いたい場合は、配列やオブジェクトをセットするらしい。 配列やオブジェクトは参照渡し扱いになる…

javascriptのcos 270°が0にならないな

なんかjavascriptのMath.cos()で270°を入れてみたら0にならなかった。 こんな感じでアラートを出したんだけど、 alert(Math.cos(Math.PI*0/4)); //0° alert(Math.cos(Math.PI*1/4)); //45° alert(Math.cos(Math.PI*2/4)); //90° alert(Math.cos(Math.PI*3/4)…

javascriptでアークタンジェント計算

javascriptでArcTangent(アークタンジェント)を計算するときはatan2関数でできる。シンタックス: Math.atan2(y, x)パラメータ: y・・・y座標の値 x・・・x座標の値戻り値: 角度を返す。単位はラジアン(-PI to PI)。計算例: 以下の単位円を考えると分かり…

スマホのブラウザだとcanvas要素で大きい画像読めないのか

ブラウザ上でcanvas要素を使って画像を加工する処理作ってるんだけど、ときどき画像が読み込めないことがある。PCのブラウザだとちゃんと読めるのに、スマホのときだけこれが発生する。 調べてみると、どうやらスマホのブラウザにはcanvas要素の制限があるみ…

パカっと開くリストではまった

↓このサイトのボタンがかっこよくて実装しようと思ったら、はまった。。 http://alexwolfe.github.io/Buttons/ボタンをクリックすると、パカッとメニュー(option1~3)のリストが出てくるやつを 使おうと思ったんだけど、一度リストが開くと閉じなくなっち…

li要素にtouchendイベントが効かなくてびびった

javascriptでli要素にtouchendイベントをセットしたんだけど、 全然反応しない。。↓(コードはこんな感じ) var list = document.getElementById("hoge"); list.addEventListener("touchend", function(){ alert("testes"); }); しばらく調べてたら、PCのChrom…

はまっちゃった

ブラウザでサイト開くと変なエラー出るようになっちゃった。 ↓(こんなの) Uncaught TypeError: undefined is not a function これはなぜかというと・・jsの読み込み順が逆だったからだった! jquaryのライブラリを先に読み込んであげるようにしたら直った…

javascriptのthisこわすぎる

javascriptで使うthis意味わかんなすぎてこわいわ。。こんな感じで、hogeがonloadされたときにthisの内容をメッセージで 出すようにしたの。 ↓ hoge.onload = hoge_init(); function hoge_init() { alert(this); } 自分的にはthisにはhogeが入ってて、アラー…

クラスメソッドとかインスタンスメソッドってなんだって思った

javascriptのクラスメソッドとインスタンスメソッドっていうのがよく分からない から調べてた。クラスメソッドをセットするときはこう書くらしい。クラスメソッド: function classA(){ //クラス定義 this.hoge = function(){ //クラスメソッド alert("tes")…

enchant.jsを使うのあきらめた

画像を加工したりグリグリ動かしたりする処理を、enchant.js を使って作ろうと思ったけど、いろいろできないことがあって あきらめた。。 もしかしてプラグインを漁ったり、自分でハックとかすれば できるのかもしれないけど、ちょっと時間がかかりそうなの…

javascriptのイベントハンドラにセットするfunction(e)とかいうのこわい

javascriptのイベントハンドラのコールバックに関数セットするとき、 みんな function(e)とか書いてるけど、「e」てなんだ?って思った。 なんとなく、コールバックが返ってきたとき、event情報とかいうの が格納されているのは分かるんだけど、なんか心配な…