Обнаружьте, если страница в iframe - серверная сторона

Я просто добавлю одну важную вещь, которая была пропущена в объяснениях выше и объясняет, когда вы ДОЛЖНЫ использовать ngOnInit.

Если вы делаете какие-либо манипуляции с DOM компонента через, например, ViewChildren , ContentChildren или ElementRef , ваши собственные элементы не будут доступны на этапе конструктора.

Однако, поскольку ngOnInit происходит после того, как компонент был создан и вызваны проверки (ngOnChanges), вы можете получить доступ к DOM на этом этапе.

export class App implements OnInit, AfterViewInit, AfterContentInit {
  @Input() myInput: string;
  @ViewChild() myTemplate: TemplateRef<any>;
  @ContentChild(ChildComponent) myComponent: ChildComponent; 

  constructor(private elementRef: ElementRef) {
     // this.elementRef.nativeElement is undefined here
     // this.myInput is undefined here
     // this.myTemplate is undefined here
     // this.myComponent is undefine here
  }

  ngOnInit() {
     // this.elementRef.nativeElement can be used from here on
     // value of this.myInput is passed from parent scope
     // this.myTemplate and this.myComponent are still undefined
  }
  ngAfterContentInit() {
     // this.myComponent now gets projected in and can be accessed
     // this.myTemplate is still undefined
  }

  ngAfterViewInit() {
     // this.myTemplate can be used now as well
  }
}
19
задан pistacchio 24 July 2009 в 18:24
поделиться

3 ответа

Однако это невозможно.

<iframe src="mypage?iframe=yes"></iframe>

а затем проверьте на стороне сервера, содержит ли строка запроса iframe = yes или с заголовком Referer, отправленным браузером.

18
ответ дан 30 November 2019 в 04:12
поделиться

Невозможно проверить это, которое будет соответствовать вашим требованиям «безопасности», как указано в вашем комментарии к ответу @ WTP.

3
ответ дан 30 November 2019 в 04:12
поделиться

Я не думаю, что серверная сторона может это сделать, так почему бы не разместить на своей странице скрытый элемент управления, который будет в iframe ? Когда URL-адрес в iframe загружается, вы можете добавить код на стороне клиента, чтобы установить скрытый ввод, чтобы указать, что вы находитесь в iframe. Самая простая проверка будет на стороне клиента в методе загрузки, например:

// Set hidden input
someHiddenInput.value = self != top

Это более безопасно, чем строка запроса, но все же может быть недостаточно для вас.

Мои 2 цента.

1
ответ дан 30 November 2019 в 04:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: