amStockを使ってみる
amStockチャートというライブラリがあります。Flash系で、商用ですがフリーで使えます。フリー版では、チャートの左上隅にamCharts.comへのリンクが出ます。
とりあえず、サンプルのHTMLをレンダリングするsnippetを作ってみました。サンプルのamstockフォルダは、webapp/js/amstock に配置してあります。
package com.unyaunya.hoge.snippet import _root_.scala.xml.NodeSeq import _root_.net.liftweb.http.js.JsCmds._ class Chart { def render(in: NodeSeq): NodeSeq = { <div> <script type="text/javascript" src="/js/amstock/swfobject.js"></script> <div id="flashcontent"> <strong>You need to upgrade your Flash Player</strong> </div> {Script(Run(""" var so = new SWFObject("/js/amstock/amstock.swf", "amstock", "800", "500", "8", "#FFFFFF"); so.addVariable("path", "/js/amstock/"); so.addVariable("settings_file", encodeURIComponent("/js/amstock/amstock_settings.xml")); so.addVariable("preloader_color", "#999999"); // so.addVariable("chart_settings", ""); // so.addVariable("additional_chart_settings", ""); // so.addVariable("loading_settings", "Loading settings"); so.write("flashcontent"); """))} </div> } }
これで動くかと思ったら、FireFox3で次のようなエラーが発生しました。
IE8では問題なく動作します。
エラー: uncaught exception: [Exception... "Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIDOMNSHTMLElement.innerHTML]" nsresult: "0x80004003 (NS_ERROR_INVALID_POINTER)" location: "JS frame :: http://localhost:8080/js/amstock/swfobject.js :: anonymous :: line 67" data: no]
LiftのMLを検索してみると、このスレッドの現象があたってそうです。
ということで、Boot.scalaに次のコードを付け加えたら、FireFox3でも動くようになりました。どういう副作用があるのかとか、時間がある時に調べないといけません。
class Boot { def boot { ・・・ LiftRules.useXhtmlMimeType = false ・・・