Estoy tratando de descargar un archivo que contiene información capturada a través de otros medios en la página. En este ejemplo, esos medios se han reemplazado con var listContacts = 'Here is some text to download in a txt'; para hacer el código más simple. Actualmente funciona en computadoras portátiles con Windows y teléfonos Android.
Esto debe funcionar sin conexión desde un archivo HTML almacenado localmente en el teléfono sin acceso a un servidor, ya que esa es la forma en que se utilizará.
El iPhone en el que hemos probado ejecuta iOS 15, por lo que no debería aplicarse el error de descarga de iOS <13 que domina los resultados de búsqueda. Javascript está habilitado en Safari. Tampoco funciona en Chrome (donde sí lo hace en Laptop y Android).
¿Cómo puedo hacer que esto funcione en iPhone?
function download(text) { var pom = document.createElement('a'); pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text)); pom.setAttribute('download', 'Contacts.txt'); pom.style.display = 'none'; document.body.appendChild(pom); pom.click(); document.body.removeChild(pom); } var listContacts = 'Here is some text to download in a txt'; <button onclick="download(listContacts)">Download</button>Después de haber dedicado 3 días completos a este problema, ahora sé que Safari no le permitirá ejecutar archivos html almacenados localmente debido al espacio aislado y la seguridad. Por lo tanto, mi problema no se puede resolver sin hacer jailbreak al costoso iPhone de trabajo de mi jefe, lo cual no tengo la intención de hacer.
El javascript funciona perfectamente bien si está alojado en Internet. Simplemente no funcionará localmente.
Quizás intente esto (lo siento, tampoco funciona en Chrome iOS pero sí en mi Safari):
https://jsfiddle.net/mplungjan/xu9ra6dL/
enlace de prueba: haga clic en
(function() { var textFile = null, makeTextFile = function(text) { var data = new Blob([text], { type: 'text/plain' }); // If we are replacing a previously generated file we need to // manually revoke the object URL to avoid memory leaks. if (textFile !== null) { window.URL.revokeObjectURL(textFile); } textFile = window.URL.createObjectURL(data); return textFile; }; document.getElementById('textbox').addEventListener('input', function() { var link = document.getElementById('downloadlink'); link.href = makeTextFile(textbox.value); link.style.display = 'block'; }, false); })(); <textarea id="textbox">Type something here</textarea> <a download="info.txt" id="downloadlink" style="display: none">Download</a>