SafariでevalScriptsが動かない・・・

 1年くらい前はAjaxやらDOM操作やらを駆使したWEBアプリにSafariを対応させようとすると、すぐに挫折していましたが、3.0.4にバージョンアップされて、意外とすんなり動作するようになった気がします。が、それでもまだちょっとハマってしまいます。

 Ajaxで取得したHTMLテキスト内のscriptタグを実行するため、prototype.js(バージョンは1.6.0.2)のevalScriptsを使ってみたのですが、IE6や7、FireFox2.0では問題なく動作するのに、Safari3.0.4ではうんともすんとも動きません。スクリプトの先頭行すら実行されていないので、どうやらscriptタグの抽出あたりで失敗しているような感じ。Safariでは割りと文字コードの問題があるようなので、試しにscriptタグ内の日本語を取り除くとうまく動作しました。scriptタグ以外に日本語がある分には問題ないようですね、UTF-8だから?
 で、どうしようか悩んだのですが、Unicodeエスケープシーケンス(\uと4桁の16進数で表現するアレ)で日本語を出力すると、Safariでも動くしIEやFireFoxでも問題ないようですので、この方法で対策することにしました。

 今回はRuby on Railsフレームワークを使っているので、どこかの賢い人のコードを参考にさせて頂き、

def to_unicode(text)
  utext = ""
  text.unpack("U*").each {|num|
    utext << sprintf("\\u%04x", num.to_i);
  }
  utext
end
のような変換関数を用意して、evalScriptsで実行するscriptタグ内の日本語を片っ端からUnicodeエスケープシーケンスに変換しました。