2015-12-04 5 views
3

Я создал PDF на сервере, когда я использую:_blank заблокирован как всплывающее окно, как я могу предотвратить это?

 function GetPdf(document) { 


      //Stores the data and creates the html,pdf file 
      $http.post('createpdf/', document).success(function(data){ 

       console.log(data.filename); 

       window.open('download2/'+data.filename+".pdf", "_self"); 


      }); 

я получаю сообщение об ошибке выскочит заблокирован в Google Chrome. Когда я использую возможность включения всплывающих окон для этого сайта, все работает отлично. Есть ли способ обойти это? Потому что это может смутить некоторых пользователей.

Но когда я использую:

window.open('download2/'+data.filename+".pdf", "_self"); 

Он открывает страницу без предупреждений, а затем основное приложение заменяется PDF, который не является результатом я хочу иметь.

ответ

2

У браузеров есть строгие правила, когда они разрешают JavaScript до show a popup, но их можно суммировать как «Только в ответ на действие пользователя».

Получение ответа на HTTP-запрос не является действием пользователя, поэтому всплывающие окна запрещены.

Простым решением является не использовать JavaScript. Точка Ajax должна связываться с сервером, не выходя из страницы, но вы все равно оставите страницу, так что на самом деле нет смысла использовать Ajax.

Просто используйте обычную подачу.

<form method="post" action="createpdf/" target="_blank"> 

... то есть скрипт сервера перенаправления на URL созданного PDF вместо возвращения URL как JSON.

+0

Отличный ответ теперь я могу начать изменять свой код. – Greg

-1

Я думаю, вы используете и внешних библиотек JavaScript, у меня была такая же проблема на другом проекте, я использовал target="_tab" и он работал, я нашел это на this question. Это способ Chrome обрабатывает всплывающие звонки с JavaScript при использовании библиотеки, Я использовал Moment.js для запуска аналогичного события и получил ту же проблему.

+0

Спасибо за предложения, но он по-прежнему блокирует PDF в Google Chrome. – Greg

0

Блокировка всплывающих окон не является проблемой, а встроенной функцией браузера, которая защищает пользователей от popup-hell. Я бы рекомендовал открыть PDF-файл в modal popup вместо нового окна браузера.

С некоторыми JQuery кода это довольно легко реализовать: документация находится here

+0

Спасибо, я посмотрю на этот вопрос – Greg

-1

Вы всегда можете использовать альтернативный маршрут, например, вместо window.open функции. Возможно, вы можете использовать функцию window.location. Windows.location.replace, который переместит вас на той же вкладке.

<script type="text/javascript"> 
<!--loc can be any changed to your window--> 
var loc = "https://google.com/"; 
window. 
window.onclick = function() { 
    window.open(loc); 
} 
</script> 

Попробуйте это :) window.open блокируется, потому что вы делаете window.open без функции щелчка. Большинство веб-браузеров заблокируют эту функцию в целях безопасности.

+0

Я обновляю свой вопрос, так как вы можете я не могу использовать window.onclick – Greg

+0

Window.open с функцией onclick - это лучшее, что нужно. Вы просто пытаетесь открыть новую вкладку на хроме? Можете быть более конкретными? – aidangig