Estoy agregando una función a una aplicación de reacción (aplicación A) que carga microservicios en diferentes pestañas. Este es un sistema heredado y lo logra mediante el uso de <iframe src="..."> devuelto como componente y consumido con <Route> .
Ahora, la fuente en cuestión cargada en el iframe también resulta ser una aplicación de reacción (aplicación B). Cuando ejecuto la aplicación B independiente y registro document.featurePolicy.allowedFeatures() , veo 46 elementos, incluido 'microphone' . El resultado del mismo registro después de cargarlo en el iframe de la aplicación A es de 6 elementos: ['picture-in-picture', 'document-domain', 'sync-xhr', 'ch-ua-platform', 'ch-ua-mobile', 'ch-ua'] . He intentado registrar las funciones permitidas en la aplicación A (antes de que cargue el iframe) y da como resultado 46 elementos. Entonces, en algún lugar entre la aplicación A que llama al iframe y la aplicación B que se carga, estamos perdiendo funciones.
He buscado soluciones desde hace un tiempo, he probado esto en Chrome y Firefox y he intentado usar allow='microphone' en el iframe con * y la url src, pero no tuve suerte. Para el contexto, aquí hay una captura de pantalla resaltada de la estructura de propiedades del iframe: estructura de prop de iframe resultante
Cualquier idea de qué podría estar eliminando las políticas o cómo podría hacerlas cumplir en la aplicación B, ya que parece que no puedo aplicarlas a través del iframe de la aplicación A.
Actualización : he intentado agregar explícitamente los encabezados de respuesta Feature-Policy y Permissions-Policy a la aplicación A (probé varias fuentes para la validación), pero aún obtengo el mismo resultado de que se descartaron en tránsito a la aplicación B
Actualización : también probé otras propiedades de iframe ( allowFullscreen , tabIndex , etc.) y puedo confirmar que funcionan, pero todo lo que está debajo de allow parece dejar una cadena vacía en las propiedades representadas y la inserta en reactInternalInstance.currentElement.props como se muestra en la captura de pantalla . Cuando uso allowFullscreen , esto también agrega 1 elemento adicional a la matriz allowedFeatures() en la aplicación B, lo que significa que las políticas de características del iframe se pueden modificar desde la aplicación A.
Entonces, aparentemente, React (o mi versión) no conoce ni procesa algunos atributos en iframe, allow ser uno de ellos. Sin embargo, me las arreglé para resolverlo pasando el elemento iframe al atributo dangerouslySetInnerHTML SetInnerHTML del padre.