Hata Ansiklopedisi

Bir iframe öğesinde güvenli olmayan bağlamalar

Angular aşağıdaki özellik adlarını kullanarak bir <iframe> elementinde öznitelik bağlaması veya özellik bağlaması algıladığında bu hatayı görürsünüz:

  • sandbox
  • allow
  • allowFullscreen
  • referrerPolicy
  • csp
  • fetchPriority

Belirtilen öznitelikler <iframe>'ler için güvenlik modeli kurulumunu etkiler ve src veya srcdoc öznitelikleri ayarlanmadan önce uygulanmaları önemlidir. Bunu zorunlu kılmak için Angular, bu özniteliklerin <iframe>'lerde statik öznitelikler olarak ayarlanmasını gerektirir; böylece değerler element oluşturma zamanında ayarlanır ve bir <iframe> örneğinin ömrü boyunca aynı kalır.

Hata, belirtilen öznitelik adlarından biriyle bir özellik bağlaması kullanıldığında fırlatılır:

<iframe [sandbox]="'allow-scripts'" src="..."></iframe>

veya bir öznitelik bağlaması olduğunda:

<iframe [attr.sandbox]="'allow-scripts'" src="..."></iframe>

Ayrıca, Direktifin host binding'lerinde benzer bir kalıp kullanıldığında da hata fırlatılır:

@Directive({
  selector: 'iframe',
  host: {
    '[sandbox]': `'allow-scripts'`,
    '[attr.sandbox]': `'allow-scripts'`,
  },
})
class IframeDirective {}

Hatayı ayıklama

Hata mesajı, güvenli olmayan bağlamalar içeren bir <iframe> elementinin bulunduğu şablonlu bileşenin adını içerir.

Önerilen çözüm, belirtilen öznitelikleri statik olarak kullanmaktır, örneğin:

<iframe sandbox="allow-scripts" src="..."></iframe>

Bu öznitelikler için farklı değerlere ihtiyacınız varsa (çeşitli koşullara bağlı olarak), uygun <iframe> elementini koşullu olarak oluşturmak için @if veya @switch kontrol akış bloklarını kullanabilirsiniz:

@if (someConditionA) {
  <iframe sandbox="allow-scripts" src="..."></iframe>
} @else if (someConditionB) {
  <iframe sandbox="allow-forms" src="..."></iframe>
} @else {
  <iframe sandbox="allow-popups" src="..."></iframe>
}