2013-03-19 21 views
0

我們正在開發使用JavaScript的Web應用程序不同,我們使用鉻作爲我們爲我們的用戶默認瀏覽器。 現在,我們遇到了一個問題,當我們在應用程序中使用window.open。在我們的應用程序中,我們需要在新的瀏覽器選項卡中打開新頁面,我們在js代碼中使用了代碼:window.open('http://ourUrl.com','_blank');運行window.open()執行鉻

瀏覽器的動作時,根據執行該行代碼是不同的。

情況1:用戶點擊一個按鈕,單擊事件將觸發我們的js函數,這個函數,直接執行這行代碼,然後在瀏覽器可能在新的瀏覽器選項卡中打開網頁。 (這是我們想要的。)

情況二:用戶點擊一個按鈕,在按鈕的點擊事件處理程序中,我們首先通過ajax將頁面上的數據提交給我們的服務器,然後在回調函數中執行這行代碼,它可能會彈出一個獨立的新窗口,而不是工具欄而不是瀏覽器選項卡(這不是我們想要的)。

我不明白爲什麼瀏覽器的動作不同,任何人都可以幫忙解釋一下?

謝謝。

回答

0

正如我上this question解釋的,爲了對一個URL在一個新的標籤被打開(未新窗口),所述window.open功能必須的用戶的範圍內產生被稱爲動作回調(例如,在的範圍內點擊
在任何其他情況下,該URL將在新窗口中打開。

解釋你遇到什麼:
情況1:window.open在爲用戶調用回調函數生成的作用。這就是它在新標籤中打開的原因。
情況2:在這種情況下,將在ajax響應回調的範圍內調用該函數,該回調是用戶生成的操作的另一個範圍(在上下文之外)。

對於第二種打開新選項卡(而不是窗口)的場景,需要在用戶單擊後立即同步呼叫window.open,而不是另一個動作(ajax響應)的回調。