質問
次の HTML を使用して、Google のホスティングから Dojo をロードしています。
<script src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("dojo", "1.1.1");</script>
<script type="text/javascript">
dojo.require("dojox.gfx");
...
これにより、requre 行で dojox.gfx が未定義のようなエラーが発生します。これを機能させる方法はありますか、それとも Google は dojox 拡張機能をサポートしていないのでしょうか?
あるいは、標準の Dojo リリースに使用できる別の一般的なホストはありますか?
解決
<script> タグから .js ファイルを直接参照する場合とは異なります (Google JS API もこれをサポートしていることに注意してください。 ここ)、google.load は同期していません。これは、コードが google.load に到達すると、Dojo が完全にロードされるまで待機せずに解析を続けることを意味します。dojo.require 行に直接進み、そこで失敗します。 道場 オブジェクトは未定義になります。
解決策 (直接 <script> タグを使用したくない場合) は、dojo を参照するすべてのコードを 始める 関数を作成し、次のようにしてコールバックとして設定します。
google.load("dojo", "1.1.1", {callback: start});
function start() {
dojo.require("dojox.gfx");
...
}
または
google.setOnLoadCallback(start);
google.load("dojo", "1.1.1");
function start() {
dojo.require("dojox.gfx");
...
}
他のヒント
もっと良い質問は、「なぜそうしたいのですか?」です。ローカルホスト上で開発している場合は相対パスを使用し、インターネットに接続されたサーバー上で開発している場合は、その上に Dojo ファイルを貼り付けます。
また、次の事項に違反していないことを確認してください。 同一生成元ポリシー
Google がインポートされたライブラリの名前空間になると思います。試す: google.dojo.require
.
おお!また、以下で指摘するように、関数を直接呼び出す代わりに google.setOnLoadCallback を使用することを忘れないでください。
dojox は実質的にメンテナンスされていないため、dojo-2 から削除される予定です。dojox のほとんどのウィジェットには大きな問題があり、良い点はほんのわずかです。
私見では、dojo は自己ホスト型であるべきです。なぜなら、上書きする必要があるものは常にあるからです。たとえば、この dojox.gfx には修正が必要です。