javascript - 回调未被调用

标签 javascript powerbi

我正在构建自定义 Power BI 可视化,因此我可以访问平台使用的 javascript 文件。我无权访问任何标记,只能在我要安装可视化的地方注入(inject)一个元素。

我正在尝试安装 Bing map ,文档如下所示:

    <div id='myMap' style='width: 100vw; height: 100vh;'></div>

    <script type='text/javascript'>
            var map;
            function loadMapScenario() {
                map = new Microsoft.Maps.Map(document.getElementById('myMap'), {});
            }


    </script>

    <script type='text/javascript' src='https://www.bing.com/api/maps/mapcontrol?key=YourBingMapsKey&callback=loadMapScenario' async defer></script>

脚本的 URL 有一个 callback 查询字符串参数,其中包括要调用的函数的名称。

鉴于我无权访问标记,我试图在我的可视化构造函数中动态地执行所有操作。我创建了一个函数,将它移动到全局范围,然后我添加了查询字符串 var 来引用它,但它永远不会被调用。你能看到我可能遗漏的任何东西吗?

constructor(options: VisualConstructorOptions) {
        this.host = options.host;
        this.elem = options.element;
        const self = this;

        function moveMethodsIntoGlobalScope(functionName){
            var parts = functionName.toString().split('\n');
            eval.call(window, parts.splice(1, parts.length - 2).join(''));  
        }

        function methodsToPutInGlobalScope(){
            function loadMapScenario(){
                console.log("finally called loadMapScenario");
            }
        }

        const script = document.createElement('script');
        script.type = 'text/javascript';
        script.async = true;

        console.log(loadMapScenario === undefined); // false, definitely in global scope
        script.src = 'https://www.bing.com/api/maps/mapcontrol?key=xxxxxxxxxx&callback=loadMapScenario';
        document.getElementsByTagName('head')[0].appendChild(script);

最佳答案

您已经定义了完成所需功能所需的功能。但是,在您给出的片段中,您实际上并没有调用 moveMethodsIntoGlobalScope(),这就是 loadMapScenario 未定义的原因。只需在注入(inject)脚本之前添加这一行。

moveMethodsIntoGlobalScope(methodsToPutInGlobalScope);

关于javascript - 回调未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47357324/

相关文章:

javascript - 如何使用 Javascript 检查视频文件中的音频?

excel - 将不同查询的最新值查找到新列中

reporting-services - 表中表 | Power BI 报表生成器

powerbi - 将切片器选择的值传递给列表变量

javascript - 在 URL 中使用井号获取 window.location.pathname - javascript

javascript - 修改正则表达式以允许负数

matrix - Power BI 矩阵中的多种数据类型

azure - 在“我的工作区”中获取仪表板时,Power BI API 返回 403 禁止

javascript - 使用 jQuery 或 Javascript 从 Cookie 中删除特定数据

javascript - 在 Node 中使用 fast-csv 返回数组