Google可视化API调用多次权限被拒绝(IE)

Google Visualization API Called Multiple Times Permission Denied (IE)

本文关键字:拒绝 IE 权限 可视化 API 调用 Google      更新时间:2023-09-26

我是Google Charts API的新手,正在尝试在我们的一个页面上实现它。

我所拥有的是一个经过客户端过滤的数据表 我想实时重新绘制我的图表客户端 在我(在SO上)发现一些问题后,如果你在页面加载后调用google.load(即通过点击一些按钮),它会删除你的html,解决方案似乎是google.load('version','package',{callback:…..})强制它追加,而不是注入。问题是,现在回调需要是一个全局函数,否则它不会解决内部上下文中的任何问题(或者看起来是这样)。。

由于以上原因,我当前的设置如下:
1) 位于的脚本https://www.google.com/jsapi包含
2) 调用google.load,将回调指针传递给我的函数,该函数具有绘图逻辑

现在#2是奇怪的部分,在我看到的例子中,"alert(zzz)"是作为一个演示回调传入的,对我来说,显然我想绘制图表。但图表都有不同的数据,因此每次调用函数时都会有所不同。

作为测试,我定义了一个名为"CALLBACK_TR"的全局变量,然后我将其指向一个匿名函数,该函数在每次用户单击按钮时都会用新数据重新定义。

工作,数据被正确显示和更新,但如果我在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、名称等)都表示"值"下的权限被拒绝。

任何意见都将不胜感激。

附言:定义回调函数后调用google.load难道没有意义吗?无论您使用回调:{}还是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);

否则,"CHART"就是任何东西。draw返回,这意味着我的.clearChart不起作用。

那么,既然有效,是否有"clearWrapper"等价物?因为我的原始代码使用了包装器,这样调用方就可以传入图表类型,而不必担心维护不同的对象。。

好的,下面是发生的事情。

CHART.clearChart()确实修复了这个问题-我确认了这一点。问题是我没有正确设置CHART引用,因为在我的第一个例子中,我在调用.draw之后定义了包装器就绪事件,这太晚了,您需要在调用draw之前定义就绪事件侦听器。

一旦我修复了这个问题,并且clearChart被正确调用,错误就停止了。