Estoy usando un iPhone 11 Pro con iOS 15.3.1.
Estoy tratando de averiguar por qué cuando visito mi sitio web, Safari se congela la mayor parte del tiempo cuando se carga la página. A veces, la página se carga la primera vez que la visito, pero al volver a cargarla, básicamente se congela sin interacción.
Cuando conecto el iPhone a una Mac y uso el inspector de Safari para conectarme a la página web en el iPhone, el inspector está básicamente en blanco en todas las pantallas. Si voy a la pestaña "Elementos", no aparece nada. Si voy a la pestaña "Consola" e intento ejecutar Javascript, no sucede nada cuando presiono enter.
En OSX, puedo ver un comportamiento similar, excepto que puedo abrir el inspector antes de visitar la página. En este caso, cuando se congela, puedo ver algunos elementos en la pestaña "Elementos", pero eso es todo. Cualquier tipo de interacción que intento hacer en el inspector da como resultado que no suceda nada.
Estoy un poco perdido. ¿Cómo puede ser tan terrible la experiencia de desarrollo para un sistema operativo/navegador tan popular y cómo puedo evitar que el inspector no funcione? No puedo replicar esta congelación en nada además de Safari.
Para ser absolutamente claro en mi pregunta:
¿Cuál es su proceso para depurar una página web en Safari cuando se encuentra en un estado en el que el inspector ya no interactúa con la página web?
Hice una amplia división y conquista de mi aplicación, comentando el código de nivel superior y trabajando hacia abajo sin comentar hasta que encontré la línea exacta que causa la congelación.
Parece que llamar a HTMLInputElement.setSelectionRange() dentro de una función de controlador de eventos onfocus provocó un bucle sincrónico infinito en Safari, tal vez Safari difumina sincrónicamente la entrada y vuelve a enfocar por alguna razón cuando se llama a esa función. Y en la recarga de la página, Safari intentaba enfocarse en una entrada con ese código automáticamente. Esa es mi suposición al menos, eliminar setSelectionRange() resuelve el problema de congelación.
Afortunadamente, la congelación fue bastante consistente, por lo que el enfoque de divide y vencerás funcionó. Desafortunadamente, el inspector realmente debería haber hecho su trabajo y se dio cuenta de que la página estaba bloqueada y me dijo en qué función se rompió la ejecución del código cuando Javascript se vio obligado a detenerse, como lo harían Chrome o Firefox.
Si alguien tiene alguna idea mejor para depurar este tipo de problemas en Safari además del equivalente de programación de una prueba de cortocircuito, con gusto aceptaré la respuesta.