¿Safari iOS no carga el archivo Javascript?

Acabo de actualizar mi iOS debido a la reciente falla de seguridad , ¡y descubrí que mi sitio web ya no se carga correctamente en mi teléfono!

He reducido el problema a un ejemplo simplificado …

index.html =

  Demo     

demo.js =

 var i = 0; function update() { 'use strict'; document.getElementById("main").innerHTML = i; i = i + 1; } setInterval(update, 1000); 

En mi escritorio, esto produce un recuento iterativo, pero cuando se ve con Safari en mi teléfono (Mobile / 12G34 Safari / 601.1), el archivo javascript simplemente no se carga ???? El archivo Javascript ni siquiera aparece en la pestaña “Todos los recursos” en mi WebInspector que estoy atando a través de USB.

Sugerencias?

Gracias,

Cuenta


Editar: esta pregunta no ha recibido respuesta, pero todavía estoy luchando con este problema. He encontrado más información.

Usando Safari WebInspector, he encontrado que javascript no se está cargando porque …

Ejecución de script bloqueada en ‘ http://192.168.133.1/demo.html ‘ porque el marco del documento es un espacio aislado y el permiso ‘allow-scripts’ no está establecido.

Como estoy publicando esta página en un servidor web casero en un esp8266, este mensaje me ha inspirado a ajustar mis encabezados HTTP. Los encabezados HTTP parecen estar bien.

No puedo entender cómo se está haciendo sandbox en primer lugar esta página html, y cómo ‘permitir’ scripts ‘para poder ejecutar mi script en Safari Mobile.

Cualquier ayuda sería muy apreciada.

Tuve exactamente el mismo problema cuando implementé la funcionalidad del servidor web para mi proyecto Arduino. La implementación de mi servidor web funcionó bien con los navegadores de escritorio y con Chrome en iOS (9.3.5). Tuve problemas tanto con Firefox (5.1 (1)) como con Safari en iOS. Mis páginas web usan scripts que incluyen jQuery. Los scripts se usan para transferir datos desde Arduino con AJAX / JSON.

El problema estaba en los ejemplos que utilicé como base para mi implementación. En esos ejemplos, la respuesta del servidor web a la solicitud HTTP GET del navegador en el caso OK no contiene nada más que el documento real solicitado. En ese caso, el navegador web piensa que el servidor web está usando HTTP / 0.9. Además, falta Content-Type. La mayoría de los navegadores pueden “adivinar” cuál es el tipo de contenido de la respuesta, aunque no está incluido.

En mi caso, Safari informó dos errores

  1. Ejecución de script bloqueada en http: // myip porque el marco del documento es un espacio aislado y el permiso ‘allow-scripts’ no está establecido.
  2. Sandboxing http: //myip/image.jpg ‘porque está usando HTTP / 0.9.

El primer error hace que el navegador rechace cargar mi javascript y también jquery.js. Por supuesto, después de eso, AJAX no funcionará. Firefox en el escritorio también se molestó por las respuestas JSON no bien formadas, pero aún funcionaba bien.

Simplemente cambié la implementación para que las respuestas HTTP siempre incluyan la versión HTTP, el código de estado y el tipo de contenido antes de los datos reales. Por ejemplo, cuando el navegador envía la solicitud GET / HTTP/1.1 , el servidor no solo envía la página web predeterminada sino que incluye

 HTTP/1.1 200 OK Content-Type: text/html 

Después de eso, todos los errores desaparecieron. Parece que a las nuevas versiones de Safari no les gusta recibir HTTP / 0.9 y que arenero recuperará su contenido.

Tuve el mismo problema (iOS 9.3.3 Safair / Chrome y en OSX con Safari 9.1.2).

La razón fue que utilizamos una biblioteca de JavaScript para tratar de cargar versiones retina de todas nuestras imágenes. De alguna manera, la solicitud enviada utilizando HTTP / 0.9 y no HTTP / 1.1 hizo que Safari guardara automáticamente toda la página en todas las solicitudes siguientes (el mensaje de error decía algo así como “zona de pruebas automáticamente … debido a HTTP / 0.9”). El registro de cambios de seguridad de iOS 9.3.3 ( https://support.apple.com/en-us/HT206902 ) menciona algo relacionado con CVE-2016-4651.

Asegúrate de que tu servidor web sea compatible con HTTP / 1.1 y que solicites la página usando HTTP / 1.1.