iframe не загружает стили, используя атрибут srcdoc - PullRequest
0 голосов
/ 24 апреля 2019

Я использую iframe в угловом компоненте, и при использовании атрибута src для загрузки сайта, стили и контент прекрасно работают. При попытке загрузить статический html-файл в виде строки с атрибутом srcdoc отображается только HTML-код. Ниже приведен очень простой пример того, что я уменьшил его до того, что он по-прежнему не загружает стили.

import {
  Component,
  OnInit,
  ViewEncapsulation
} from '@angular/core';

@Component({
  selector: 'app-newsletter-viewer',
  templateUrl: './newsletter-viewer.component.html',
  styleUrls: ['./newsletter-viewer.component.scss'],
  encapsulation: ViewEncapsulation.ShadowDom
})
export class NewsletterViewerComponent implements OnInit {
  newsletterSrcDoc: string;
  constructor() {}

  ngOnInit() {
    this.newsletterSrcDoc = `
    <!DOCTYPE html>
    <html>
      <head>
        <title></title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css" />
    <style>
    p {
    color: red;
    font-size: 2em;
    }
    </style>
      </head>
      <body>
        <div class="page">
        <div id="template2">
        <div class="section-cover-photo">
        <div class="col">
        <div class="container">
          <img src="" class="cover-photo">
        <div class="banner-template2">
          <h1>Test Title</h1>
          <p>This is a test document.</p>
        </div>
        </div>
        </div>
        </div>
        </div>
        </div>
      </body>
    </html>
    `;
  }

}
.wrap {
  width: 170px;
  height: 220px;
  padding: 0;
  overflow: hidden;
}

.frame {
  width: 8.5in;
  height: 11in;
  border: 0;
  -ms-transform: scale(0.25);
  -moz-transform: scale(0.25);
  -o-transform: scale(0.25);
  -webkit-transform: scale(0.25);
  transform: scale(0.25);
  -ms-transform-origin: 0 0;
  -moz-transform-origin: 0 0;
  -o-transform-origin: 0 0;
  -webkit-transform-origin: 0 0;
  transform-origin: 0 0;
}
<div class="wrap">
  <iframe class="frame" [srcdoc]="newsletterSrcDoc"></iframe>
</div>

1 Ответ

0 голосов
/ 25 апреля 2019

После применения другого подхода при поиске связанных тем в переполнении стека принятый ответ на эту тему мне показался подходящим: iframe внутри компонента angular2, свойство 'contentWindow' не существует для типа 'HTMLElement'

Из того, что я могу сказать, проблема связана с тем, как / когда Angular выбирает рендеринг DOM в iframe.Если содержимое документа iframe отображается после инициализации представления (в частности, iframe в представлении), то тег iframe <head> больше не пропускается в полной структуре DOM на веб-странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...