Я просто добавлю одну важную вещь, которая была пропущена в объяснениях выше и объясняет, когда вы ДОЛЖНЫ использовать 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
}
}
Однако это невозможно.
<iframe src="mypage?iframe=yes"></iframe>
а затем проверьте на стороне сервера, содержит ли строка запроса iframe = yes или с заголовком Referer, отправленным браузером.
Невозможно проверить это, которое будет соответствовать вашим требованиям «безопасности», как указано в вашем комментарии к ответу @ WTP.
Я не думаю, что серверная сторона может это сделать, так почему бы не разместить на своей странице скрытый элемент управления, который будет в iframe ? Когда URL-адрес в iframe загружается, вы можете добавить код на стороне клиента, чтобы установить скрытый ввод, чтобы указать, что вы находитесь в iframe. Самая простая проверка будет на стороне клиента в методе загрузки, например:
// Set hidden input
someHiddenInput.value = self != top
Это более безопасно, чем строка запроса, но все же может быть недостаточно для вас.
Мои 2 цента.