ArcGIS Api(Esri)触发multipleDefine错误

时间:2017-10-30 12:56:12

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

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

ArcGIS与Dojo捆绑在一起,{{3}}用作所有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,但我很难找到一个好的解决方案。

1 个答案:

答案 0 :(得分:0)

过了一会儿,我找到了问题的原因;我们无法一起启动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);
};

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