重定向到自动打开的MS office (Word、Excel、PowerPoint)文档后,如何关闭浏览器窗口?



在我正在开发的web应用程序中,我们有一些负责获取办公文档的长时间运行的进程。我们基本上用window.open打开一个弹出窗口,它负责轮询服务器以报告进程状态并等待文档的可用性,并在生成文档准备好时重定向到生成的文档(窗口)。location = THE_URL_OF_THE_FILE).

当重定向发生时,根据用户配置(参见Microsoft知识库),MS office文档可以直接在Internet Explorer中打开/嵌入,也可以在新的office套装实例中打开该文件。

在后一种情况下,文档在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);
       }
   });

在新的word实例中打开文档,然后在文档打开后窗口保持打开状态,但是在新的Ms office实例中打开文件时窗口应该关闭。Url是服务器上指向文档的位置。

这不可能。原因有很多:

  1. 当你改变window的位置后,你不能执行任何代码-你完成了
  2. 在新窗口中打开的文档不能与旧窗口通信,因为它不是HTML页面,你不能在那里执行任何JavaScript
  3. 没有办法告诉文档将如何处理。您可以根据所使用的浏览器类型和操作系统进行一些猜测,但这始终是猜测。它可以下载,在某些插件中打开,在Chrome Frame中本机打开(即将推出的功能),在MS Word中自动打开……可能的结果是无止境的。

我建议你重新考虑你的网站逻辑。

我建议执行一些AJAX,而不是打开一个新窗口,并使用它来检查文档的状态,当它准备好了,在一个新的窗口中打开它。

如果你真的需要打开一个新窗口来做到这一点,我建议你改变你的窗口的document.location(你已经用来打开弹出)。然后关闭弹出窗口。这不会将页面重定向到一个新的位置,而是像你描述的那样打开文档(但是,根据用户的设置,不能保证这种行为)。

下面是使用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属性;它可以用于两个窗口之间的通信

最新更新