別サイトのブログパーツを作成している時にハマったのでメモ。
思い当たるエラーの原因を書いていきます。
ちゃんと理解できていない気がするので、間違ってたら教えて下さい。。
ヘッダーの指定
header("Content-type: application/x-javascript");
ヘッダーにコンテンツタイプを指定することで、PHP が出力する内容が JavaScript であることを明示することができますが、私の環境では無くても動いたのでおそらくあっても無くても良いです。
ただ、元の PHP ファイルにアクセスした時に、ヘッダーの指定を行っている場合は出力されたコードのみが表示されますが、ヘッダーの指定を行っていない場合は HTML が反映されて整った形でブラウザに表示されるという違いはあります。
改行コードを除去する
JavaScript ではクォーテーション内での改行を許可していないらしく、出力する文字列中に改行コードが含まれているとエラーが発生します。
かといって、出力するコードを全て改行無しで書くのは地獄なので、str_replace() で改行コードを除去しましょう。
$str = str_replace(array("\r\n","\r","\n"," "), '', $str);
document.write
これに一番悩まされました。
どこのサイトを見ても document.write が必要と書いてあるので、
echo "document.write('".$str."');";
のように書いていたのですが、どうも上手くいかないので普通に
echo $str;
と書いたら見事に動きました。
結局 document.write ってなんだったんだろう。。。