Dojo-跨域发布加载小部件

Dojo-跨域发布加载小部件,dojo,cross-domain,Dojo,Cross Domain,我正在从事一个项目,该项目要求从另一台服务器加载一些自定义Dojo小部件(即我们自己编写的小部件)。尽管几天来我尽了最大努力,但我似乎无法让Dojo加载这些小部件 Dojo从Google CDN加载,小部件从www.example.com加载,网站位于www.foo.com 我不能发布实际的项目文件(这是一个公司的项目),但我用较小的测试文件复制了错误 Test.html(在www.foo.com上): var djConfig={ 是的, 模块路径:{ 'com.example':'http

我正在从事一个项目,该项目要求从另一台服务器加载一些自定义Dojo小部件(即我们自己编写的小部件)。尽管几天来我尽了最大努力,但我似乎无法让Dojo加载这些小部件

Dojo从Google CDN加载,小部件从www.example.com加载,网站位于www.foo.com

我不能发布实际的项目文件(这是一个公司的项目),但我用较小的测试文件复制了错误

Test.html(在www.foo.com上):


var djConfig={
是的,
模块路径:{
'com.example':'http://example.com/some/path/com.example'
}
}
require(“dijit._小部件”);
dojo.require(“dijit._模板化”);
dojo.addOnLoad(函数(){
require(“com.example.widget.Test”,false);
dojo.addOnLoad(函数(){
新的com.example.widget.Test().placeAt(dojo.byId('content');
});
});
Test.xd.js(位于www.example.com/some/path/com.example/widget/Test.xd.js):

dojo.provide(“com.example.widget.Test”);
require(“dijit._小部件”);
dojo.require(“dijit._模板化”);
declare(“com.example.widget.Test”,[dijit.\u widget,dijit.\u模板化]{
templateString:“这是一个测试”,
后创建:函数(){
console.log(“在后期创建中”);
console.log(this.div);
this.div.innerHTML+='!!!';
}
});
在Firebug中,我在延迟几秒钟后看到一个错误,表示无法加载跨域资源com.example.widget.Test。但是,在“Net”选项卡中,我可以看到Test.xd.js已成功下载,并且我可以设置断点并看到dojo.declare执行并完成,没有错误


谢谢你的帮助。如果我能提供任何其他信息,请告诉我。

在XD loader中处理模块声明有不同的方法。这是由于加载程序如何处理“模块就绪”事件。您很可能会体验到dojo.addOnLoad从未运行过,因为它“知道”这一点——某些必需的模块没有声明

即便如此,它们也很可能被宣布——dojotoolkit的1.7+版本的变化似乎重新认识到了这一事实。我认为,这是因为myModule.xd.js模块中没有正确实现“模块就绪”机制

它基本上是声明的“头”或“结束”,涉及几个步骤-从
dojo包装基本模块中的所有内容。提供
eof

标准示例锅炉模块文件“{modulePath}}/my/Tree.js” X域示例锅炉模块文件{{modulePath}}/my/Tree.xd.js
有没有可能升级到dojo 1.7版?从那时起,dojo处理xdomain的方式就不同了。对不起,我刚刚看到了这一点。我们无法升级到1.7。
<html>

<div id="content"></div>

<script>
    var djConfig = {
        isDebug: true,
        modulePaths: {
            'com.example': 'http://example.com/some/path/com.example'
        }
    }
</script>

<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.4.3/dojo/dojo.xd.js.uncompressed.js"></script>

<script type="text/javascript">
    dojo.require("dijit._Widget");
    dojo.require("dijit._Templated");

    dojo.addOnLoad(function() {
        dojo.require("com.example.widget.Test", false);

        dojo.addOnLoad(function() {
            new com.example.widget.Test().placeAt(dojo.byId('content'));
        });
    });
</script>

</html>
dojo.provide("com.example.widget.Test");

dojo.require("dijit._Widget");
dojo.require("dijit._Templated");

dojo.declare("com.example.widget.Test", [dijit._Widget, dijit._Templated], {
    templateString: "<div dojoAttachPoint=\"div\">This is a test</div>",

    postCreate: function() {
        console.log("In postCreate");
        console.log(this.div);
        this.div.innerHTML += '!!!';
    }
});
dojo.provide("my.Tree");

dojo.require("dijit.Tree");

dojo.declare("my.Tree", dijit.Tree, {
    // class definition
});
dojo._xdResourceLoaded(function(){ 
  return {
    depends: [
        ["provide", "my.Tree"],
        ["require", "dijit.Tree"]
    ],
    defineResource: function(dojo) {
      ///////////////////////////////
      /// Begin standard declaration
         dojo.provide("my.Tree");

         dojo.require("dijit.Tree");

         dojo.declare("my.Tree", dijit.Tree, {
            // class definition
         });
      /// End standard declaration
      ///////////////////////////////
    }
  }
})();