【问题标题】:ArcGIS Api (Esri) triggering multipleDefine errorArcGIS Api (Esri) 触发 multipleDefine 错误
【发布时间】:2018-04-11 11:14:03
【问题描述】:

我在代码中使用ArcGIS API for JavaScript v4.4 时遇到了这个奇怪的问题。我正在尝试构建一个 Excel Web 插件,我想在其中加载 ArcGIS 地图,但是当我加载 ArcGIS 时出现multipleDefine 错误。

ArcGIS 与 Dojo 捆绑在一起,用作所有 ArcGIS/esri 包的加载器。由于 ArcGIS 构建 API 的方式,我没有其他选择来使用 Dojo 加载我自己的自定义 JS 包。所以我不能决定不使用 Dojo,因此不会收到 multipleDefine 错误。

我像这样加载自己的 JS 文件:

<script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js" type="text/javascript"></script>

<script>
    var dojoConfig = {
        parseOnLoad: false,
        async: false,
        // we make aliases for our js file
        aliases:  [
            ['index',  './Bundles/index.js'],
        ],
    };
</script>
<script src="https://js.arcgis.com/4.4/init.js"></script>
<script>
    require(['index'], function (index) {
        //...do something
    });
</script>

当我重新启动页面时,我每两/三次试验就会收到一个multipleDefine 错误。经过大量调查,我了解到错误在于 Office.js API,但我很难找到一个好的解决方案。

【问题讨论】:

    标签: dojo arcgis office-js arcgis-js-api


    【解决方案1】:

    过了一会儿,我找到了问题的原因;我们不能同时启动 office-js 和 Dojo,因为它们都想在我们页面的 head 标签中添加脚本,并且不知何故它们最终相互冲突,因此我们得到了可怕的 multipleDefined Dojo 错误并且我们的一些文件没有得到已加载。

    一旦确定了这个原因,我决定通过确保在完全加载 Office 和依赖项后加载 Dojo、Argis 和我的自定义 js 文件来解决它。

    我在我的 js 代码中是这样实现的:

    // This Dojo config variable has to be defined before Dojo is loaded in our scripts
    var dojoConfig = {
    
        // we make aliases for our custom js file
        aliases: [
            ['index', './Bundles/index.js'],
        ],
    
        // We require our dependencies (our own code bundles) with Dojo. 
        // Notice that it is mandatory to bundle our js files
        // as AMD Modules for Dojo to be able to load them as dependencies.
        deps: ['index'],
    };
    
    // Once office has fully initialized we can add our arcgis file and let 
    // him load our own required javascript files.
    // We cannot start Office-js and Dojo/Arcgis together because they both 
    // want to add scripts in the head tag of the HTML page and
    // somehow they end up in conflict, thus we get the dreaded 
    // multipleDefined Dojo error and some of our files
    // do not get loaded.
    
    Office.initialize = function (reason) {
        // we manually add the Arcgis script to the header of our page
        // once we are sure Office and dependencies has fully loaded.
        var tag = document.createElement('script');
        tag.src = 'https://js.arcgis.com/4.4/init.js';
        document.getElementsByTagName('head')[0].appendChild(tag);
    };
    

    添加后,代码开始像魅力一样工作。

    【讨论】:

      猜你喜欢
      • 2021-09-21
      • 2015-03-17
      • 2015-04-14
      • 2013-06-15
      • 2013-04-13
      • 1970-01-01
      • 1970-01-01
      • 2014-05-30
      • 2020-04-27
      相关资源
      最近更新 更多