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

Javascript 重定向到自动打开的MS office(word、excel、powerpoint)文档后,如何关闭浏览器窗口?,javascript,internet-explorer,javascript-events,Javascript,Internet Explorer,Javascript Events,在我正在开发的web应用程序中,我们有一些长期运行的流程,负责获取office文档。我们基本上是用window.open打开一个弹出窗口,它负责轮询服务器以报告进程状态并等待文档的可用性,并在文档准备就绪时重定向到生成的文档(window.location=文档的URL) 发生重定向时,根据用户配置(请参阅Microsoft知识库),MS office文档可以直接在Internet Explorer中打开/嵌入,也可以在office套件的新实例中打开文件 在后一种情况下,文档在Excel中成功打

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

发生重定向时,根据用户配置(请参阅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);
       }
   });
她的edocument在一个新的word实例中打开,文档打开后窗口仍保持打开状态。。但当文件在新的Ms office实例中打开时,窗口应关闭。
Url是服务器上指向文档的位置

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

  • 更改
    窗口
    的位置后,您无法执行任何代码-完成了
  • 在新窗口中打开的文档无法与旧窗口通信,因为它不是HTML页面,您无法在那里执行任何JavaScript
  • 无法得知该文件将如何处理。根据浏览器类型和使用的操作系统,您可以进行一些猜测,但这始终是一个猜测。它可以下载,在某些插件中打开,在(即将推出的功能)中本机打开,在MS Word中自动打开。。。可能的结果是无止境的
  • 我建议你重新考虑你的网站逻辑

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


    如果您确实需要打开一个新窗口来执行此操作,我建议您更改父窗口(用于打开弹出窗口的窗口)的
    document.location
    。然后关闭弹出窗口。这不会将页面重定向到新位置,而是按照您所描述的方式打开文档(但是,根据用户的设置无法保证该行为)。

    以下是使用Javascript打开/关闭窗口的代码片段(源代码:)。您可以根据自己的需要对其进行修改:

    <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>
    
    
    函数openWin()
    {
    myWindow=window.open(“,”,“宽度=200,高度=100”);
    myWindow.document.write(“这是‘myWindow’

    ”); } 函数closeWin() { myWindow.close(); }

    您可以使用jQuery并在window.open上实现某种回调。此外,如果该窗口是通过javascript从另一个窗口打开的,则存在父属性;它可以用于两个窗口之间的通信。

    除非该窗口是由JS.im使用JS命令(window.open)打开的,否则无法通过JS关闭浏览器窗口/选项卡,该窗口将打开一个新窗口,该窗口将链接到word文档,并打开文件,正如epascarello所说的那样-这无法完成。无法检查文档是否由浏览器中的某个插件打开。对于作者,您如何确切地知道您需要关闭窗口?@Max我想象,当打开的窗口与父窗口通信并告诉它关闭窗口后,经过一段时间的延迟。但这个解决方案并不理想。请重新阅读问题。作者正在打开一个包含文件的窗口。该文件可以使用某些插件(如IE中的pdf查看器)打开,也可以显示“打开/保存”对话框。你怎么知道是哪一个?在一种情况下关闭窗口,在另一种情况下——窗口包含文档,不应关闭;我现在没有确切的答案。此外,如果窗口通过javascript打开另一个窗口,则存在父属性;可用于在两个窗口之间进行通信。另一个问题是:你为什么投票反对我,w/w学校出了什么问题?我再次问:你为什么投票反对我的答案?由作者决定是否有用。注意:1和2可以用一个框架来解决。因此,只有3个是一个真正无法解决的问题。”(……)MS office文档可以直接在Internet Explorer中打开/嵌入,也可以在office套装的新实例中打开文件。在后一种情况下,文档在Excel中成功打开,但导致其打开的窗口将永远留在那里。”-这是他的问题。关于帧:不是重定向到
    file.pdf
    而是重定向到
    viewer.page?file=file.pdf
    。该查看器页面包含一些您需要的javascript代码和一个
    ,它的
    src
    已更改为真实的
    文件.pdf
    。完成后,主页(iframe的父级)仍然在您的命令中,Javascript仍然可以在那里运行。但是,这仍然不能解决第三部分的问题,您不知道iframe是否正在呈现文档,或者是否显示了“保存/打开”对话框。@Max:再说一遍,这不是他的问题。他说的不是嵌入浏览器中的文档,而是在Office套件中打开的文档。我相信这与在嵌入式查看器中查看PDF是一样的。这套办公套装背后并没有什么神奇之处,它使用了一些IE插件来显示嵌入到占位符页面中的文档。无论如何,如果您将文档路径放在框架中而不是窗口位置,您将可以控制剩余页面,而不会丢失嵌入式查看器的任何功能。这就是为什么若你们把1和2放到框架中,它们就不是问题了。