15.1 Una API de bajo nivel 333 15.1.1 Base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 15.1.2 Objetos y Almacenes de objetos 334 15.1.3 Índices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 15.1.4 Transacciones 336 15.1.5 Métodos de almacenes de objetos 336 15.2 Implementar IndexedDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 15.2.1 Plantilla 337 15.2.2 Abrir la base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 15.2.3 Almacenes de objetos e índices . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 15.2.4 Agregar objetos 340 15.2.5 Leer objetos 341 15.2.6 Finalizar y probar el código 342 15.3 Listar datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 15.3.1 Cursores 343 15.3.2 Cambio de orden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 15.4 Eliminar datos 347 15.5 Buscar datos 348 16 API File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 16.1 Almacenamiento de archivos 351 16.2 Procesar archivos de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 16.2.1 Plantilla 352 16.2.2 Leer archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 16.2.3 Propiedades de archivos 354 16.2.4 Blobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 16.2.5 Eventos 357 16.3 Crear archivos 359 16.3.1 Documento HTML 359 16.3.2 El disco duro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 16.3.3 Crear archivos 361 16.3.4 Crear directorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 16.3.5 Listar archivos 363 16.3.6 Manejar archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 16.3.7 Mover archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 16.3.8 Copiar archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
16.3.9 Eliminar 370 16.4 Contenido de archivos 371 16.4.1 Escribir contenido 371 16.4.2 Agregar contenido 374 16.4.3 Leer contenido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 16.5 Acceder a los archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 16.6 Sistema de archivos real 378 17 API Geolocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 17.1 Encontrar su lugar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 17.1.1 Documento HTML 383 17.1.2 getCurrentPosition(ubicación) . . . . . . . . . . . . . . . . . . . . . . . 384 17.1.3 getCurrentPosition(ubicación, error) 385 17.1.4 getCurrentPosition(ubicación, error, configuración) 386 17.1.5 watchPosition(ubicación, error, configuración) . . . . . . . . . . . . 388 17.1.6 Usos prácticos con Google Maps 389 18 API History 391 18.1 La interfaz de API History 391 18.1.1 Navegar por la Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 18.1.2 Nuevos métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 18.1.3 URL falsas 393 18.1.4 La propiedad state 394 18.1.5 Un ejemplo de la vida real . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 19 API Offline 401 19.1 El manifiesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 19.1.1 El archivo manifiesto 401 19.1.2 Categorías 402 19.1.3 Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 19.1.4 Uso del archivo manifiesto 404 19.2 API Offline 405 19.2.1 Los errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 19.2.2 online y offline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 19.2.3 Estado del caché 407 19.2.4 Progreso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 19.2.5 Actualización del caché . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
20 API Page Visibility 414 20.1 El estado de visibilidad 414 20 1 1 Estado actual 414 20 1 2 Una mejor experiencia 415 20 1 3 Detector completo 416 21 Ajax Level 2 418 21.1 XMLHttpRequest 418 21 1 1 Recuperar datos 419 21 1 2 Propiedades de respuesta 421 21 1 3 Eventos 422 21 1 4 Envío de datos 424 21 1 5 Solicitudes de orígenes cruzados 426 21 1 6 Cargar archivos 426 21 1 7 Una aplicación real 428 22 API Web Messaging 432 22.1 Mensajería entre documentos 432 22 1 1 Enviar un mensaje 432 22 1 2 Comunicar con un iframe 432 22 1 3 Filtros y orígenes cruzados 435 23 API WebSocket 438 23.1 WebSockets 438 23 1 1 Servidor WebSocket 438 23 1 2 Instalación y ejecución de un servidor WS 439 23 1 3 Constructor 440 23 1 4 Métodos 440 23 1 5 Propiedades 441 23 1 6 Eventos 441 23 1 7 Documento HTML 441 23 1 8 Iniciar la comunicación 442 23 1 9 Aplicación completa 443 24 API WebRTC 445 24.1 Llega la revolución 445 24 1 1 El viejo paradigma 445 24 1 2 El nuevo paradigma 446
24.1.3 Requisitos 446 24.1.4 RTCPeerConnection 447 24.1.5 Candidato ICE 448 24.1.6 Oferta y respuesta 448 24.1.7 SessionDescription . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449 24.1.8 Flujos de medios o streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449 24.1.9 Eventos 449 24.1.10 El final 450 24.2 Ejecutar WebRTC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450 24.2.1 Servidor de señalización 450 24.2.2 Servidores ICE 452 24.2.3 Documento HTML 452 24.2.4 El código Javascript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 24.2.5 Aplicación de la vida real 458 24.3 Canales de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 24.3.1 Creación de canales de datos 458 24.3.2. Envío de datos 459 25 API Web Audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 25.1 Estructura de nodos de audio 464 25.1.1 Los nodos de audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 25.1.2 Contexto Audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 25.1.3 Fuentes de audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 25.1.4 Nodos de conexión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 25.1 Sonidos para la Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468 25.2.1 Dos nodos básicos 468 25.2.2 Bucles y tiempos 470 25.2.3 Crear AudioNodes 471 25.2.4 AudioParam 472 25.2.5 GainNode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 25.2.6 DelayNode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 25.2.7 BiquadFilterNode 476 25.2.8 DynamicsCompressorNode . . . . . . . . . . . . . . . . . . . . . . . . . . . 477 25.2.9 ConvolverNode 478 25.2.10 PannerNode y sonido 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 25.12.11 AnalyserNode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 26 API Web Workers 486
26.1 Hacer el trabajo duro . . . . . . . . . . . . . . . . . . . . . . . . . . . 486 26.1.1 Crear un trabajador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486 26.1.2 Enviar y recibir mensajes 487 26.1.3 Detectar errores 489 26.1.4 Detener el trabajador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 26.1.5 API asíncronas 492 26.1.6 Importación de scripts 493 26.1.7 Trabajador compartido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494 Conclusiones 498 Trabajando para el mundo 498 Las alternativas 498 Modernizr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499 Bibliotecas 500 Google Chrome Frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500 Trabajar para la nube 501 Las API que no han sido incluidas 503 Lo que debe saber 503 Palabras finales del autor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504