iFrame подавляет всплывающее окно аутентификации для https, когда родительское окно уже аутентифицировано - PullRequest
1 голос
/ 31 марта 2010

Я разработал механизм печати для приложения интрасети, работающего по протоколу HTTPS. Используя javascript и jQuery, я создаю на странице iframe и заполняю его всеми динамическими данными, которые должны быть напечатаны.

У iframe есть источник /MyController/Print, который просто возвращает пустую фиктивную страницу. Затем он заменяется динамическим контентом. Я делаю это, чтобы избежать расположения страницы на странице «about: blank» и выводить всплывающее окно с некоторым защищенным содержимым, некоторым небезопасным содержимым.

Это прекрасно работает локально, но как только он попадает на сервер https, я получаю всплывающее окно аутентификации домена при попытке создать iframe. Он запрашивает мое имя пользователя и пароль (хотя основное приложение никогда не делает этого - оно использует внутреннюю сеть для идентификации пользователей).

Есть ли способ подавить всплывающее окно пользователя / пароля?

Ответы [ 2 ]

0 голосов
/ 01 апреля 2010

это на самом деле из другого поста, но мне действительно нравится решение.

вы можете настроить свой контроллер действий для составления данных для печати в формате pdf

public FileStreamResult Print(int id)


{
     var model = _CustomRepository.Get(id);
     this.ConvertToPDF = true;
     return View( "HtmlView" );
 }

 public override OnResultExecuting( ResultExecutingContext context )
 {
      if (this.ConvertToPDF)
      {
          this.PDFStream = new MemoryStream();
          context.HttpContext.Response.Filter = new PDFStreamFilter( this.PDFStream );
      }
 }

 public override OnResultExecuted( ResultExecutedContext context )
 {
      if (this.ConvertToPDF)
      {
          context.HttpContext.Response.Clear();
          this.PDFStream.Seek( 0, SeekOrigin.Begin );
          Stream byteStream = _PrintService.PrintToPDF( this.PDFStream );
          StreamReader reader = new StreamReader( byteStream );
          context.HttpContext.Response.AddHeader( "content-dispostion",
                 "attachemnt; filename=report.pdf" );
          context.HttpContext.Response.AddHeader( "content-type",
                 "application/pdf" );
          context.HttpContext.Response.Write( reader.ReadToEnd() );
      }
}

Я предполагаю, что вы используете .net MVC. Надеюсь, я не ошибаюсь

0 голосов
/ 31 марта 2010

Использование iframe в такой ситуации обычно создает x проблем безопасности домена.

Эта проблема возникает в соответствии с Одинаковая политика происхождения

Поэтому рекомендуемый способ решения этой проблемы - использовать

<style media="print">
   css properties to modify the page for print
</style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...