0

GWTアプリにいくつかの外部Javascriptファイルがあり、ユーザーがそれらを必要とするセクションにアクセスしたときにのみダウンロードしたいと思います。次のように、JSファイルをUiBinderページに含めました。

<g:HTMLPanel>
    <script src="blah.js"/>
</g:HTMLPanel>

ビューが読み込まれるとすぐにファイルがダウンロードされるとは限らないため、ビューを読み込むときに、外部コードにアクセスできないことを示す例外を確認し、例外なくビューを作成できるようになるまで再試行します。

これはFirefoxで機能しますが、IE7/IE8では機能しません。AJAX Editionを使用してIEで何が起こっているかを追跡しましたが、ファイルの要求が行われましたが、何もダウンロードされず、サイズは0です。Webサーバーのアクセスログには、ファイルが要求されたことが示されません。

何が起こっているのか分かりますか?

それとも、これを行うためのより良い方法はありますか?私がこれまでに行った調査は、GWTがこれを行うための便利な方法を持っていることを示していません。

アップデート:

まだ2.4を使用していませんが、試してみるために、ScriptInjectorに必要なソースファイルをコピーし、Thomasの提案に従ってそれを使用しようとしました。JSファイルは両方のブラウザで正しくダウンロードされますが、外部スクリプトの参照が見つからないことを示す「$ wnd.xxxxisundefined」例外が発生します。onSuccess()呼び出しがスクリプトインジェクトから戻るまでウィジェットをロードしようとしないので、コードは次のようになります。

ScriptInjector.fromUrl("../xxxx.js").setCallback( 
      new Callback<Void, Exception>() { 
         public void onFailure(Exception reason) { 
           Window.alert("Script load failed."); 
         } 
         public void onSuccess(Void result) { 
           Window.alert("Script load success."); 
           MyWidget widget = new MyWidget(); 
           client.onSuccess(widget); // adds the widget to the view 
         } 
      }).inject(); 

また、FirebugのDOMに追加されたJSファイル参照は表示されませんが、実際のindex.jspではなく、ページのGWT部分のDOMに追加されているためかと思います。

4

2 に答える 2

1

innerHTML(を使用して)挿入されたスクリプト要素HTMLPanelは実行されません。

を使用ScriptInjectorして、スクリプトをページに動的に挿入する必要があります。

于 2011-11-10T11:49:32.553 に答える
1

スクリプトをトップレベルウィンドウに追加するようにScriptInjectorに指示する必要があります。

ScriptInjector.fromUrl(scriptUrl)
    .setWindow(ScriptInjector.TOP_WINDOW)
    .setCallback(new Callback<Void, Exception>() {
        @Override
        public void onSuccess(Void result) {
            //script loaded OK
        }

        @Override
        public void onFailure(Exception reason) {
            //TODO script injection failed
        }
    }).inject();
于 2011-12-27T08:45:18.313 に答える