2013-05-09 85 views
0

在我正在開發的Web應用程序中,我們有一些負責獲取Office文檔的長時間運行的流程。我們基本上用window.open打開一個彈出窗口,它負責輪詢服務器以報告進程狀態並等待文檔的可用性,並在準備就緒時重定向到生成的文檔(window.location = THE_URL_OF_THE_FILE)。重定向到MS Office(word,excel,powerpoint)文檔後,如何關閉瀏覽器窗口自動打開?

當重定向發生時,根據用戶配置(請參閱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); 
     } 
    }); 

她edocument是一個新詞實例中打開和TEH TEH窗口遺體在打開文檔後打開..但在新的Ms office實例中打開該文件時窗口應該關閉。 Url是指向文檔的服務器上的位置。

+1

答案是Nope。 – epascarello 2013-05-09 12:57:31

+0

除非JS打開該窗口,否則無法通過JS關閉瀏覽器窗口/選項卡。 – adamb 2013-05-09 12:57:49

+0

即時通訊使用js命令(window.open)打開新窗口,該窗口將鏈接到word文檔並打開文件 – Sri 2013-05-09 12:59:07

回答

1

這是不可能的。原因是多方面的:

  1. 更改window的位置後,您不能執行任何代碼 - 大功告成
  2. 在新窗口中不能與舊的窗口溝通打開,因爲它不是文檔一個HTML頁面,你不能在那裏執行任何JavaScript
  3. 有沒有辦法告訴如何處理文檔。根據所使用的瀏覽器類型和操作系統,您可以做一些猜測工作,但這總是一個猜測。它可以下載,在某個插件中打開,在Chrome Frame(即將推出的功能)中本地打開,在MS Word中自動打開...可能的結果是無窮無盡的。

我建議你重新考慮你的網站邏輯。

我建議執行一些AJAX而不是打開一個新窗口,並使用它來檢查文檔的狀態,以及何時準備好,在新窗口中打開它。

如果你真的需要打開一個新的窗口,要做到這一點,我建議你改變你的窗口(你用來打開彈出的一個)的document.location。之後關閉彈出。這不會將頁面重定向到新位置,而是按照您所描述的方式打開文檔(但是,根據用戶的設置,無法保證該行爲)。

+0

只是爲了注意:1和2可以用一個框架來解決。所以只有3是一個真正無法解決的問題。 – bezmax 2013-05-09 13:13:40

+0

如何用框架解決? – MMM 2013-05-09 13:14:13

+0

「(...)MS Office文檔可能會直接在Internet Explorer中打開/嵌入**,或者它可能會在新的辦公室服裝實例**中打開該文件。**後一種情況下,文檔在Excel中成功打開**,但導致其打開的窗口永遠保持在那裏**。「 - 這是他的問題。 – MMM 2013-05-09 13:15:07

-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從另一個窗口打開的,那麼就有一個父屬性;它可以用來在兩個窗口之間進行通信。

+0

您如何知道在作者的情況下您需要關閉窗口? – bezmax 2013-05-09 13:12:01

+0

這是如何幫助他的?並且[不要使用w3schools](http://w3fools.com/)。 – MMM 2013-05-09 13:12:08

+0

@Max我想象一下,一旦打開的窗口與父窗口進行通信,並告訴它關閉它,一段時間後。但是這個解決方案並不理想。 – MMM 2013-05-09 13:13:03

相關問題