ハイチャートのソースバージョンを使用すると、次のエラーが発生することがわかります。
highcharts.src.js、行 5099 文字 4
これはvar VMLRendererExtension
ブロックにあります:
init: function (container, width, height) {
var renderer = this,
boxWrapper,
box;
renderer.alignedObjects = [];
boxWrapper = renderer.createElement(DIV);
box = boxWrapper.element;
box.style.position = RELATIVE; // for freeform drawing using renderer directly
container.appendChild(boxWrapper.element);
// generate the containing box
renderer.isVML = true;
renderer.box = box;
renderer.boxWrapper = boxWrapper;
renderer.setSize(width, height, false);
// The only way to make IE6 and IE7 print is to use a global namespace. However,
// with IE8 the only way to make the dynamic shapes visible in screen and print mode
// seems to be to add the xmlns attribute and the behaviour style inline.
if (!doc.namespaces.hcv) {
doc.namespaces.add('hcv', 'urn:schemas-microsoft-com:vml');
// setup default css
doc.createStyleSheet().cssText =
'hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke' +
'{ behavior:url(#default#VML); display: inline-block; } ';
}
}
エラーはdoc.createStyleSheet().cssText
アイテムにあります。どの部分が死にかけているのかわからない。
このページには 2 つのチャートがあります。メインのデータ チャートであり、エリア全体にデータを配布するチャートです。ページにいずれかのグラフのみを表示する (つまり、1 つのグラフをレンダリングしない) 場合、このエラーは発生しません。両方のチャートがレンダリングされると、実行順序で最初のチャートが取得されますが、2 番目のチャートは取得されません。私たちのチャートコードはここにあります。jsFiddle ではこのエラーを再現できないことに注意してください。このエラーは IE8 でのみ発生します。
HighCharts フォーラムでこの投稿を見ました。私のコードは大規模なサイトのほんの一部であるため、ドキュメントの種類を変更できません。doc.createStyleSheet().cssText
エラーを表示しない唯一の方法は、彼の行をコメントアウトすることです。私はむしろこれをコメントアウトしたくありません。
さて、ここが醜いところです。これは、この 1 つのページでのみ発生します。データを表示する他のページに移動しても、このエラーは発生しません。それで、あなたは言います。そうですね、グラフ ビルダーのコードはすべてのページで同じです。唯一の違いは、系列 (カテゴリと値) とグラフの高さです。テキストを読みやすくするために、シリーズの数に基づいてグラフの高さを動的に増やします。このエラーをスローしないこのデータ セットの分布グラフで、さまざまな数のカテゴリをテストしました。他のページに移動して、失敗したページのグラフの高さと一致させようとすると、このエラーも再現できません。