2012-03-20 2 views
0

У меня есть приложение ExtJs. Когда пользователю нужно просмотреть отчет PDF, созданный на стороне сервера, я открываю новую ссылку, используя функцию window.open(). Я передаю URL-адрес службы, которая предоставляет файл PDF, хранящийся на веб-сервере.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

+0

обычная вкладка/окно браузера. это внешний файл PDF, и я не хотел встраивать его в окно ExtJs. – sha

+0

- это одна ссылка html и другой вызов метода js? Вывести фактический код, вызывающий window.open – dbrin

ответ

1

Мне удалось выяснить, что происходит. Если JS открывает внешнее окно сразу после инициированного пользователем события (пользователь щелкает в основном) - он обрабатывается браузером как новая вкладка. Если я поставлю задержку в 5 секунд для одного и того же обработчика события нажатия кнопки - он обрабатывается как новое окно.

Это имеет смысл для кого-либо?

+0

Я испытываю ту же проблему, что и вы, также пытаясь открыть PDF в новом окне. Вы решили это в конце? Как насчет фиктивного события onclick? – okyanet

+0

Да. Я решил это, добавив окно подтверждения перед показом отчета.Поэтому первый отчет создается в течение некоторого времени, а затем, когда он готов - я показываю окно подтверждения и после того, как пользователь нажимает на него - настоящий отчет. – sha

Смежные вопросы