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);
       }
   });

她的电子文档在一个新的单词实例中打开,并且在打开文档后窗口仍然打开..但是当在新的 Ms office 实例中打开文件时,窗口应该关闭。Url 是服务器上指向文档的位置。

4

2 回答 2

2

这是不可能的。出于很多原因:

  1. 更改window' 位置后,您无法执行任何代码 - 完成
  2. 在新窗口中打开的文档无法与旧窗口通信,因为它不是 HTML 页面,您无法在那里执行任何 JavaScript
  3. 无法说明如何处理文档。您可以根据所使用的浏览器类型和操作系统进行一些猜测工作,但这始终是猜测。它可以下载,在某些插件中打开,在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 属性;它可用于在两个窗口之间进行通信。

于 2013-05-09T13:11:07.193 回答