0

似乎更改 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>
4

1 回答 1

0

仍然没有解决根本原因的方法。但我们最终所做的只是将 document.domain 属性的设置推回,直到 Google 图表在页面上呈现之后。然后您可以设置 document.domain 而不会引起问题。

显然,如果您要从页面中动态添加/删除图表,这将不起作用,但对于绝大多数情况它应该这样做。

于 2013-12-08T03:01:21.573 回答