似乎更改 document.domain 属性会导致 Google Charts 在 Internet Explorer(至少版本 8)中不起作用。下面是一个演示问题的非常简单的页面。示例代码几乎直接来自 Google Charts 库沙箱。唯一的主要区别是我添加了一个设置 document.domain 的先前 JavaScript。
我们正在处理一个子域,比如“test.example.com”,出于其他原因,我们需要将 document.domain 属性设置为“example.com”。这打破了图表。它只是说“您的浏览器不支持图表”。
即使您将 document.domain 设置为“test.example.com”(与默认值完全相同),图表仍然无法正常工作。据我所知,Google Charts 正在 IE8 中创建一个 iframe,并通过更改 document.domain 来触发同源安全策略。
因为我不控制 Google 图书馆,所以我无法在 iframe 本身上设置 document.domain(因为我现在无权从我有 JavaScript 的上页访问它)。关于如何解决这个问题的任何想法,同时仍然保持更改 document.domain 的能力?
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
document.domain = "example.com";
</script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Year', 'Sales', 'Expenses'],
['2004', 1000, 400],
['2005', 1170, 460],
['2006', 660, 1120],
['2007', 1030, 540]
]);
var options = {
title: 'Company Performance',
hAxis: {title: 'Year', titleTextStyle: {color: 'red'}}
};
var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>
</head>
<body>
<div id="chart_div" style="width: 900px; height: 500px;"></div>
</body>
</html>