доступ к dom — есть ли эквивалент Renderer2 для чтения?

#javascript #angular

#javascript #angular

Вопрос:

У меня есть приложение angular 5.x, которому необходимо обрабатывать платежи из iframe — URL обратного вызова не является частью проекта angular, и на самом деле есть несколько, которые могут меняться в зависимости от контекста.

Некоторые из них довольно современные и не представляют проблемы. Другие отвечают на сообщение и возвращают необработанный JSON — в этом случае мне нужно получить данные непосредственно из документа в iframe перед его закрытием.

для этого требуется (ну, надеюсь, что нет) доступ к: elementRef.nativeElement и оттуда .contentDocument или contentWindow.document , чтение текста оттуда (даже если ответ является необработанным JSON, он загружается в html iframe, поэтому он получает документ «бесплатно», который я должен отделить вручную).

Итак, я делаю это. Это работает. Но это не поддается проверке. Поскольку я не читаю и не записываю стили, я не думаю, что Renderer2 это может мне помочь. Как я могу получить внутренний текст элемента в iframe, не касаясь DOM?

Комментарии:

1. Итак, у меня была похожая ситуация при интеграции платежного шлюза .. Как только платеж будет выполнен, когда вы получите результат, чтобы отправить его обратно в свое приложение, которое вы можете использовать window.parent.postMessage Вот как я справился. Это чисто и просто, нет необходимости в доступе к dom и всему остальному. Просто получите требуемый ответ, и сообщение вернется к вашему родительскому окну.

2. @Manish — привет, Маниш. У меня нет доступа к конечным точкам обратного вызова. Некоторые из них делают именно то, что вы описываете, и запрашивают обратный вызов как GET. Другие запрашивают обратный вызов как POST, а сообщения POST не могут иметь тела, поэтому нет скрипта, нет window.parent и т.д. Необработанный JSON должен быть и возвращается в этих случаях. Я должен иметь дело с обоими.

3. @Manish — в любом случае, моя проблема заключается не в обработке обратного вызова, а в написании тестовых примеров для него теперь, когда он работает.

4. Извините за задержку ответа .. написание тестового примера будет еще сложнее .. поскольку gateway не находится непосредственно под вашим контролем.. удачи с этим .. не смогу помочь в этом случае, не уверен, как материал закодирован и реализован..