Javascript 谷歌可视化API多次调用权限被拒绝(IE)
我是谷歌图表API的新手,正在尝试在我们的一个页面上实现它 我拥有的是一个经过客户端过滤的数据表。我想在客户端实时地重新绘制图表。在一些问题之后,我发现(如此)如果你在页面加载后调用google.load(即,点击一些按钮),它会清除你的html,解决方案似乎是google.load('version','package',{callback:…}),强制它追加而不是注入。这里的问题是,现在回调需要是一个全局函数,否则它将无法解析该内部上下文中的任何内容(或者看起来是这样) 由于上述原因,我当前的设置如下:Javascript 谷歌可视化API多次调用权限被拒绝(IE),javascript,api,charts,permissions,visualization,Javascript,Api,Charts,Permissions,Visualization,我是谷歌图表API的新手,正在尝试在我们的一个页面上实现它 我拥有的是一个经过客户端过滤的数据表。我想在客户端实时地重新绘制图表。在一些问题之后,我发现(如此)如果你在页面加载后调用google.load(即,点击一些按钮),它会清除你的html,解决方案似乎是google.load('version','package',{callback:…}),强制它追加而不是注入。这里的问题是,现在回调需要是一个全局函数,否则它将无法解析该内部上下文中的任何内容(或者看起来是这样) 由于上述原因,我当前
1) 包含位于的脚本
2) 调用google.load,传入一个回调指针,指向具有绘图逻辑的my函数 现在#2是奇怪的部分,在我看到的示例中,“alert(zzz)”作为一个演示回调传入,对我来说,显然,我想绘制图表。但是图表都有不同的数据,因此每次调用函数时函数都是不同的 作为测试,我定义了一个名为“CALLBACK_PTR”的全局变量,然后将其指向一个匿名函数,该函数在用户每次单击按钮时都用新数据重新定义 这是可行的,数据被正确地显示和更新,但是如果我在IE中查看开发工具的按钮点击(即函数调用)#2+,我会看到一堆权限被拒绝的错误。有什么线索吗 JS代码如下:
var CALLBACK_PTR;
function createChart(sChartType,sContainerID,oData,oOptions)
{
CALLBACK_PTR = null;
// Load the Visualization API and the piechart package.
google.load('visualization', '1.0',{'callback':'CALLBACK_PTR()'});
// Set a callback to run when the Google Visualization API is loaded.
//google.setOnLoadCallback(drawVisualization);
CALLBACK_PTR = function () {
var oDataTable = new google.visualization.arrayToDataTable(
oData
);
var wrapper = new google.visualization.ChartWrapper(
{
chartType: sChartType,
dataTable: oDataTable,
options:oOptions,
containerId:sContainerID
}
);
wrapper.draw();
//interactivity, will build on this in the future
google.visualization.events.addListener(wrapper,'ready',function(){
var chart=wrapper.getChart();
google.visualization.events.addListener(chart, 'select',function(){
var selectedItem = chart.getSelection()[0];
if (selectedItem) {
var value = oDataTable.getValue(selectedItem.row, selectedItem.column);
alert('Value:' + value);
}
})//end inner anon function
});
} // end draw function
}//end createChart
这一切都有点奇怪,但它确实起作用了,除了拒绝许可的事情。每当他们单击按钮(过滤可见数据)时,就会通过createChart(…)从客户端页面调用此函数
您将在JS调试器中看到的错误:
SCRIPT70: Permission denied
format+en,default+en.I.js, line 83 character 16
单击它会让我看到谷歌的模糊代码:
if(1==a[ed])
如果我将鼠标悬停在“a”上,所有属性(id、name等)都会在“value”下表示权限被拒绝
如有任何意见,将不胜感激
另外,在定义回调函数后调用google.load是否有意义?无论您使用callback:{}还是setOnLoadCallback,为什么不先定义回调?特别是在我的情况下,它的变化
请随意评论由于使用包装器而不得不编写的交互性代码,因为包装器准备就绪之前wrapper.getChart不起作用,所以我必须将图表侦听器包装在包装器“就绪”侦听器中
编辑
我试图将其简化为:
function createChart(sChartType,sContainerID,oData,oOptions)
{
if(CHART){
//clear the old chart --TODO:, what if they want to generate multiple charts??
CHART.clearChart();
}
CALLBACK_PTR = null;
CALLBACK_PTR = function () {
var oDataTable = new google.visualization.arrayToDataTable(
oData
);
CHART = new google.visualization.LineChart(document.getElementById(sContainerID)).
draw(oDataTable, oOptions);
} // end draw function
// Load the Visualization API and the piechart package.
google.load('visualization', '1.0',{'packages':['corechart'],'callback':'CALLBACK_PTR()'});
}//end function createChart
但仍然并没有运气。即使清除了一些其他帖子中建议的图表引用,仍然会被拒绝
另一次编辑
上面的代码不正确,行:
CHART = new google.visualization.LineChart(document.getElementById(sContainerID)).
draw(oDataTable, oOptions);
应该是:
CHART = new google.visualization.LineChart(document.getElementById(sContainerID));
CHART.draw(oDataTable, oOptions);
否则“图表”就是什么。draw返回,意思是我的.clearChart不工作
既然这样,有没有“clearWrapper”的等价物?因为我的原始代码使用了包装器,所以调用者可以传入图表类型,而不必担心维护不同的对象。好的,下面是发生的事情 clearChart()确实解决了这个问题-我确认了这一点。问题是我没有正确设置图表引用,因为在我的第一个示例中,我在调用.draw之后定义了包装器就绪事件,这太晚了,您需要在调用draw之前定义就绪事件侦听器 一旦我解决了这个问题,clearChart被正确调用,错误就停止了