0

私が取り組んでいる Web アプリケーションには、オフィス ドキュメントの取得を担当する長期実行プロセスがいくつかあります。基本的に window.open でポップアップを開き、サーバーをポーリングしてプロセスのステータスを報告し、ドキュメントが利用可能になるのを待ち、準備ができたら生成されたドキュメントにリダイレクトします (window.location = THE_URL_OF_THE_FILE)。

リダイレクトが発生すると、ユーザーの構成 (Microsoft ナレッジ ベースを参照) に応じて、MS Office ドキュメントが Internet Explorer で直接開いたり埋め込まれたり、オフィス スーツの新しいインスタンスでファイルが開いたりする場合があります。

後者の場合、ドキュメントは Excel で正常に開きますが、ドキュメントを開く原因となったウィンドウは永久にそこに残ります。

Excel がファイルを正常にロードするとすぐにそのウィンドウを強制的に閉じる方法はありますか?

これは、IE と Windows の統合がどのように機能するかに関係していると思います...

編集

$.ajax({
           async: false,
           type: 'Post',
           dataType: 'json',
           url: '/Controller/Action/' + docId,
           data: $('form').serialize(),
           success: function (url) {
               window.open(url, 'ShowFile', 'top=25,left=50,width=680,height=400,help=1,status=1,scrollbars=1,toolbars=1,menubar=1,resizable=1',false);
       }
   });

彼女の電子文書は新しい単語インスタンスで開かれ、文書を開いた後もウィンドウは開いたままになります..しかし、ファイルが新しいオフィスインスタンスで開かれると、ウィンドウは閉じるはずです。Url は、ドキュメントを指すサーバー上の場所です。

4

2 に答える 2

2

これは不可能です。多くの理由から:

  1. の場所を変更windowすると、コードを実行できなくなります。
  2. 新しいウィンドウで開かれたドキュメントは、古いウィンドウと通信できません。これは HTML ページではなく、そこで JavaScript を実行できないためです。
  3. ドキュメントがどのように処理されるかを知る方法はありません。ブラウザの種類や使用している OS によっては、ある程度の推測作業を行うことができますが、それは常に推測になります。ダウンロードしたり、何らかのプラグインで開いたり、Chrome Frameでネイティブに開いたり (今後の機能)、MS Word で自動的に開いたりすることができます。考えられる結果は無限です。

ウェブサイトのロジックを再考することをお勧めします。

新しいウィンドウを開く代わりにAJAXを実行し、それを使用してドキュメントのステータスを確認し、準備ができたら新しいウィンドウで開くことをお勧めします。

そのために新しいウィンドウを開く必要がある場合は、親ウィンドウ (ポップアップを開くために使用したウィンドウ) を変更することをお勧めdocument.locationます。その後、ポップアップを閉じます。これはページを新しい場所にリダイレクトしませんが、説明したようにドキュメントを開きます (ただし、ユーザーの設定によってはその動作は保証されません)。

于 2013-05-09T13:05:38.537 に答える
-1

以下は、Javascript を使用したウィンドウの開閉のコード スニペットです (ソース: http://www.w3schools.com/jsref/met_win_close.asp )。おそらく必要に応じて変更できます。

<html>
<head>
<script>
function openWin()
{
myWindow=window.open("","","width=200,height=100");
myWindow.document.write("<p>This is 'myWindow'</p>");
}

function closeWin()
{
myWindow.close();
}
</script>
</head>
<body>

<input type="button" value="Open 'myWindow'" onclick="openWin()">
<input type="button" value="Close 'myWindow'" onclick="closeWin()">

</body>
</html>

jQuery を使用して、window.open に一種のコールバックを実装できます。また、ウィンドウが JavaScript によって別のウィンドウから開かれた場合、parent プロパティがあります。2 つのウィンドウ間の通信に使用できます。

于 2013-05-09T13:11:07.193 に答える