Soy nuevo en HTML / Javascript, así como en la codificación en general, así que tengan paciencia conmigo :). Estoy tratando de crear un juego "Encuentra las diferencias" en html5 usando javascript. Todo es local (en mi máquina). Tengo dos imágenes, del mismo tamaño, una con diferencias. Para generar datos sobre los campos en los que se puede hacer clic, tengo un programa Java que lee las dos imágenes y genera todas las posiciones en las que los píxeles son diferentes en un archivo XML. Mi plan era usar este archivo XML con mi javascript para definir dónde podía hacer clic el usuario. Sin embargo, parece (corríjame si me equivoco) que JavaScript no puede leer archivos XML locales por razones de seguridad. No quiero usar un ActiveXObject porque planeo poner esto en dispositivos móviles a través de la brecha telefónica o un objeto webkit. ¿Alguien tiene un mejor enfoque para este problema, o tal vez una forma de leer archivos XML locales a través de JavaScript? Cualquier ayuda sería muy apreciada, gracias.

0
John Smith 12 ago. 2011 a las 22:00

3 respuestas

La mejor respuesta

Si planea poner esto en un teléfono inteligente (iOS y Android) y leer archivos locales, he hecho cosas similares con JSON (sí, no use XML).

  1. Convierta su salida a JSON
  2. Ponga esto como parte de su paquete de aplicación. Por ejemplo, en Android, lo puse como parte de .apk en / appFiles / json
  3. Cree un proveedor de contenido personalizado que lea el archivo local. Creo el mío como contenido: // pero tú creas el esquema que quieras. Puede aprovechar android.content.ContentProvider para lograr un esquema de URL personalizado. iOS también tiene su propia forma de crear esquemas personalizados. La implementación simplemente lee tu almacenamiento local y da el contenido
  4. Para leerlo desde Javascript, simplemente llamo ajax con el esquema personalizado para obtener el archivo json. Por ejemplo, el contenido: //myfile/theFile.json simplemente me redirige a un directorio particular en el almacenamiento local con /myfile/theFile.json agregado a él

A continuación se muestra el ejemplo para anular openFile () en ContentProvider



    public ParcelFileDescriptor openFile (Uri uri, String mode) {
        try {
            Context c = getContext();
            File cacheDir = c.getCacheDir();
            String uriString = uri.toString();
            String htmlFile = uriString.replaceAll(CUSTOM_CONTENT_URI, "");

            // Translate the uri into pointer in the cache
            File htmlResource = new File(cacheDir.toString() + File.separator +  htmlFile);

            File parentDir = htmlResource.getParentFile();
            if(!parentDir.exists()) {
                parentDir.mkdirs();
            }

            // get the file from one of the resources within the local storage
            InputStream in = WebViewContentProvider.class.getResourceAsStream(htmlFile);

            // copy the local storage to a cache file
            copy(in, new FileOutputStream(htmlResource));
            return ParcelFileDescriptor.open(htmlResource, ParcelFileDescriptor.MODE_READ_WRITE);
        } catch(Exception e) {
            throw new RuntimeException(e);
        }
    }

Espero que ayude

0
momo 13 ago. 2011 a las 20:04

Sugeriría modificar su programa java para generar un archivo con formato JSON en lugar de XML. JSON es nativo de JavaScript y será mucho más sencillo cargarlo.

En cuanto a la carga real de los datos, no estoy seguro de cuál es la mejor opción, ya que dice que desea ejecutar esto de manera uniforme en un dispositivo móvil. Si solo estuviera haciendo un sitio web normal, podría configurar un servidor web usando Apache o IIS dependiendo de su sistema operativo y colocar los archivos en la raíz del documento. Una vez que haya hecho eso, puede cargar el archivo JSON a través de Ajax, que puede buscarse fácilmente en Google.

No estoy segura si esto ayuda a alguna.

1
Jason Miesionczek 12 ago. 2011 a las 18:21

Como se trata de un archivo local, puede hacerlo con jQuery

$.ajax({
    type: "GET",
    url: "your.xml",
    dataType: "xml",
    success: function(xml){

    ///do your thing

    }
});

http://api.jquery.com/jQuery.ajax/

1
Jason Gennaro 12 ago. 2011 a las 18:26