Dojo跨域代码不触发ready()函数

时间:2017-03-02 15:51:56

标签: dojo

我正在尝试加载跨域dojo组件,虽然将javascript文件加载到浏览器中的GET请求具有200状态,但ready()函数永远不会在require语句之后触发。另请注意,在此示例中,Comp1组件是使用遗留的dojo.provide(),dojo.require()等语法编写的,因此我将async设置设置为legacyAsyc。

我可以尝试获取有关正在发生的事情的更多信息的任何建议都会很棒。在js文件本身的GET请求中没有CORS头,但我不认为这是执行代码所必需的(??),因为我在Firebug中没有收到任何CORS错误。

代码/配置如下。

感谢。

        dojoConfig = {
        async: "legacyAsync",
        baseUrl: "https://my.remote.domain/path/to/dojo/",
        has: {
            "dojo-debug-messages": true
        },
        tlmSiblingOfDojo: true,
            packages: [{
                name: "myremotestuff",
                location: "../../myremotestuff"
            }],
        trace:{
            "loader-inject":1,
            "loader-define":1,
            "loader-exec-module":1,
            "loader-run-factory":1,
            "loader-finish-exec":1,
            "loader-define-module":1,
            "loader-circular-dependency":1
        },
        isDebug: true,
        cacheBust: true
    };

    ...

<script type="text/javascript">

    console.info("=== SCRIPT BLOCK BEGIN ===");

    require.on('error', function (error) {
        console.info("%%%% require error function fired. error: [ " + error + " ] %%%%");
    });

    require([
        "dojo/ready",
        "myremotestuff/Comp1"
    ], function (ready,comp1) {

        ready(function(){
            console.info("ready() - *Begin* - (I never see these messages, and this line doesn't get hit in debug mode either)");
            console.info("ready() - comp1 defined? " + ( (comp1 !== undefined) && (comp1 !== null) ) );
            console.info("ready() - *End*");
        });

    });

    console.info("=== SCRIPT BLOCK END ===");

</script>

1 个答案:

答案 0 :(得分:0)

dojo require在引擎盖下使用ajax来要求你的模块。 每当ajax涉及JavaScript时,同源策略都适用。

Same-origin policy是浏览器的安全机制,可防止获取数据或将数据发送到其他域。在您的情况下,未调用ready函数,因为浏览器阻止了模块的请求。

解决此问题最简洁,最方便的方法是在AMD模块所在的服务器上启用CORS。

启用CORS非常简单here a good tutorial website.