2012-03-20 92 views
0

我有一個ExtJs應用程序。當用戶需要查看在服務器端生成的PDF報告時,我使用window.open()函數打開一個新鏈接。我通過提供存儲在Web服務器上的PDF文件的服務URL。window.open(url)不同的行爲 - 相同的代碼,不同的時間

該功能從兩個不同的地方調用:用戶可以滾動報表列表並單擊其中一個報表的工具欄按鈕並查看報表,或者用戶可以執行報表,等待直到生成報表,然後應用程序將自動顯示報表。兩種情況之間的唯一區別 - 第二種情況是異步,報告打開的最後一步是從回調函數中調用的。

但這兩種情況的行爲有所不同。第一個 - 將在Chrome中打開新標籤頁,並在Safari中,這不會被視爲popup窗口。在第二種情況下 - 它將在新窗口中打開(當然在同一瀏覽器中 - 因此配置完全相同)。

我不明白爲什麼行爲不同。

任何想法?

更新:澄清 - 都是JS調用。一個是這樣的:

buttonClick: function() { 
    window.open('myreporturl'); 
} 

其他更復雜一點,但在最後:

runReport: function() { 
    store.on('load', function { 
     window.open('myreporturl'); 
    }); 
    store.load(); 
} 

UPDATE2:我能夠弄清楚發生了什麼事情。如果JS在用戶啓動事件後立即打開外部窗口(用戶基本點擊) - 它會被瀏覽器視爲新標籤。如果我爲相同的按鈕單擊事件處理程序放置了5秒延遲 - 它將被視爲新窗口。

這對任何人都有意義嗎?

+0

這是一個extjs窗口或只是一個普通的瀏覽器窗口 – dbrin 2012-03-20 20:12:39

+0

定期瀏覽器選項卡/窗口。它是外部PDF文件,我不想嵌入ExtJs窗口 – sha 2012-03-20 20:14:23

+0

是一個html鏈接和另一個js方法調用?發佈調用window.open的實際代碼 – dbrin 2012-03-20 20:32:55

回答

1

我能弄清楚發生了什麼事。如果JS在用戶啓動事件後立即打開外部窗口(用戶基本點擊) - 它會被瀏覽器視爲新標籤。如果我爲相同的按鈕單擊事件處理程序放置了5秒延遲 - 它將被視爲新窗口。

這對任何人都有意義嗎?

+0

我遇到同樣的問題,也嘗試在新窗口中打開PDF。你最終解決了這個問題嗎?虛擬onclick事件呢? – okyanet 2012-06-09 04:16:43

+0

是的。我在顯示報告之前通過添加確認框來解決此問題。因此,第一份報告正在生成一段時間,然後當它準備好時 - 我顯示確認框,並在用戶點擊之後 - 呈現報告。 – sha 2012-06-09 11:22:09

相關問題