В случае, если вы не являетесь владельцем контента в iframe, вы не можете сделать многое. Лучшее, что вы можете сделать, - это создать цикл (setInterval), который будет сравнивать значение с последним значением, которое вы видели.
<iframe #graph></iframe>
@ViewChild('graph', { static: true }) graph!: ElementRef<HTMLIFrameElement>;
private srcWatcher = new Observable(observer => {
const interval = setInterval(() => {
observer.next(this.graph && this.graph.nativeElement && this.graph.nativeElement.src);
}, 10);
return () => clearInterval(interval);
}).pipe(
distinctUntilChanged(),
);
имея наблюдаемый как этот, теперь вы можете реагировать на любые изменения в нем.
ПРИМЕЧАНИЕ: Я бы также предположил, что наблюдаемое должно выходить за пределы zoneJS, если интервал ожидания должен быть низким. В противном случае Angular будет запускать обнаружение глобальных изменений на каждом интервале. Под глобальным я подразумеваю, что он будет проверять все приложение на всех поддеревьях, использующих стратегию обнаружения изменений по умолчанию.