2017-12-19 15 views
0

GWTを使用してJavaScriptObjectから派生したクラスによって作成された 'タブ'を閉じる必要があります。 は、ここでは、コードスニペットです: -GWTのJavaScriptObjectから派生したWindowクラスのWindow.open()で作成されたタブを閉じる

public class MyWindow extends JavaScriptObject { 
    // All types that extend JavaScriptObject must have a protected, 
    // no-args constructor. 
    protected MyWindow() {} 

    public static native MyWindow open(String url, String target, String options) /*-{ 
     return $wnd.open(url, target, options); 
    }-*/; 

    public static final native void close() /*-{ 
     this.close(); 
    }-*/; 

    public static final native void setUrl(String url) /*-{ 
     if (this.location) { 
     this.location = url; 
     } 
    }-*/; 
} 

public class MyUsingClass { 
    // Have to have my own window object derived from JavaScriptObject. 
    // Cannot use standard Window, because we are in an async callback, 
    // and browser thinks it's a popup! 
    MyWindow myWindow = MyWindow.open(null, "_blank", null); 
    ... 
    @Override 
    public void registeredCallback(ArrayList<String> params) 
    { 
     ... 
     // The URL passed to setUrl, is a call to a servlet that returns a 
     // response with Content-Disposition set in the header. 
     // We get a File SaveAs Dialog box displayed, 'owned', I assume, by 
     // this.myWindow. 
     myWindow.setUrl(url); 
     ... 
    } 

私が持っている問題で、ダイアログボックスがどのように[と場所/時に押された、しかし、私は理解できないばかり期待通りに動作し、OKまたはキャンセル]ボタンを閉じることです]をクリックして、MyWindow.open()の呼び出しによって作成されたタブを閉じます。 私は、どういうわけか、File SaveAs Dialogを閉じることによって引き起こされるイベントを捕捉する必要があると思います。 ご協力いただければ幸いです。 ありがとう!

答えて

0

ファイルの保存ダイアログを表示するために、新しいタブ(ウィンドウ)を開く必要はありません。 (私は、ファイルがアクセス可能であると確信しているとき)私はちょうど行う現在のウィンドウを使用して:

Window.Location.assign(__file_servlet_path__); 

私はContent-typeContent-dispositionヘッダーを設定するサーブレットで:

resp.setHeader("Content-disposition", "attachment; filename=\"" + __file_name__ + "\""); 
+0

はあなたの非常に迅速な応答をありがとう。 MyWindow.open()の代わりにWindow.Location.assign()を使ってみると、必要に応じてすべて動作します! 絶対に美しく、簡単に修正できます...ありがとうございました! – TulseHillian

関連する問題