As atualizações do IndexedDB para o IE10 e aplicativos estilo Metro

A equipe do Internet Explorer em conjunto com a comunidade da Web continua aperfeiçoando a especificação IndexedDB. O IndexedDB é um rascunho de trabalho do W3C que permite armazenar, pesquisar e recuperar dados no dispositivo do usuário, mesmo quando a conectividade com a Internet está desabilitada. O IndexedDB é um recurso da plataforma Web compartilhado pelo IE10 e aplicativos estilo Metro no Windows 8 Consumer Preview.

Esta postagem descreve as alterações feitas no Internet Explorer 10 Consumer preview para implementar a última versão da especificação do W3C.

Alterações no controle de versão

A alteração mais importante se refere à maneira como os desenvolvedores atualizam seus esquemas de banco de dados (isto é, repositórios de objetos, índices) de uma versão para a outra. O grupo de trabalho (incluindo a Microsoft) decidiu substituir a API IDBDatabase.setVersion pela nova API IDBFactory.open. A nova API open usa um parâmetro adicional para detectar se você deseja usar a versão do banco de dados atual ou se deseja atualizar o esquema de banco de dados para uma versão mais nova. A API open agora retorna um objeto IDBOpenDBRequest que permite que você se registre no evento onupgradeneeded. No manipulador de eventos, você pode atualizar o esquema do banco de dados adicionando outros índices e repositórios de objetos.

Para atualizar o seu código existente, adicione o parâmetro version ao seu método open, substituindo a chamada por setVersion e registre o novo manipulador de eventos onupgradeneeded no IDBOpenDBRequest (veja abaixo).

Exemplo do código antigo – o verde realça o código afetado

function openDBTest(dbName) {

var rq = window.msIndexedDB.open(dbName);

rq.onsuccess = successOpenningDB;

rq.onerror = failureHandler;

}

 

function successOpenningDB(evt) {

var db = evt.target.result;

var rq = db.setVersion("1");

rq.onsuccess = successHandler;

rq.onerror = failureHandler;

}

 

function successHandler(evt) {

//create schema

}

Exemplo do novo código – o amarelo realça o código alterado

function openDBTest(dbName) {

var rq = window.msIndexedDB.open(dbName, 1);

rq.onsuccess = useDB;

rq.onupgradeneeded = successHandler;

rq.onerror = failureHandler;

}

 

function successHandler(evt) {

//create schema

}

Alterações adicionais

Além disso, fizemos várias alterações menores (mas significativas) na plataforma:

  • Adicionamos o método IDBCursor.advance(count). Esse método permite ignorar registros em um cursor, o que, por sua vez, permite cenários de paginação. O parâmetro count define o número de registros que você deseja ignorar antes de acessar os dados. Os valores válidos são iguais ou maior do que 1.

  • Adicionamos os métodos IDBObjectStore.count(key) e IDBIndex.count(key). Eles permitem contar os registros que correspondem a critérios específicos. Se o valor-chave não estiver especificado, é retornada uma contagem de todos os registros no índice ou no repositório de objetos.

  • Adicionamos o método IDBFactory.cmp(first, second). Esse método compara dois valores-chave para determinar se um valor é maior do que o outro ou se são iguais.

  • O IDBKeyRanges agora funciona com métodos adicionais, incluindo IDBObjectStore.count, IDBObjectStore.delete, IDBIndex.count. Isso permite relacionar registros que abrangem grupos de valores-chave.

  • Os valores adicionados ao banco de dados não precisam mais satisfazer todos os índices definidos anteriormente. Isso permite adicionar registros a um IDBObjectStore fora dos limites de índices definidos anteriormente.

  • Se for emitida uma exceção no contexto de uma transação ativa, a transação será abortada. Isso sugere que, se uma exceção for emitida no manipulador de eventos onsuccess de qualquer solicitação, a transação ativa será abortada. Entretanto, o tratamento da exceção permitirá à transação do banco de dados continuar normalmente.

    // This won’t abort the transaction because there is no active transaction.

    function createTransaction() {

    var txn = db.transaction("test");

    window.aaaaaa();

    }

     

    // This will abort the transaction because the exception is thrown when there is an active transaction.

    var rq = objectStore.add(record);

    rq.onsuccess = function (event) {

    window.aaaaaa();

    }

  • Adicionamos suporte às propriedades do índice em um Blob. Isso permite baixar dados binários da Web, armazená-los localmente e usar propriedades blob (por exemplo, nome, tamanho etc.) como índices ou chaves exclusivas no blob. Essa funcionalidade permite cenários como exibir imagens e vídeos ou ouvir sua coleção de músicas offline, com a capacidade de pesquisar a sua coleção usando o nome do blob. A nossa última demonstração de Test drive do IE mostra como você pode usar essa funcionalidade para exibir os seus álbuns do Facebook offline.

    Captura de tela do complemento do Facebook com a demonstração de Test Drive do IE
    Captura de tela da demonstração de Test Drive do IE Complemento do Facebook

Também enviamos mais de 100 casos de teste do IndexedDB para o grupo de trabalho do W3C, incluindo novos testes e atualizações dos testes existentes.

Controlando como sites e aplicativos usam o IndexedDB

Além das atualizações para atender às alterações na especificação do W3C, o Windows 8 Consumer Preview inclui aperfeiçoamentos que permitem aos usuários continuar controlando como sites e aplicativos usam o IndexedDB em seus dispositivos:

  • Introduzimos um manipulador de desinstalação para os aplicativos estilo Metro que usam o indexedDB. Esse manipulador garante que sempre que os usuários finais removerem um aplicativo, os dados relacionados no banco de dados do IndexedDB do aplicativo sejam automaticamente excluídos no processo de desinstalação.
  • Implementamos cotas (limites de armazenamento) para evitar que sites esgotem o espaço em disco. Os limites de cota podem ser atualizados por administradores de TI por meio das configurações de política de grupo ou por usuários com acesso administrativo ao Registro. No entanto, as cotas não se aplicam aos aplicativos estilo Metro.
  • Adicionamos uma nova interface do navegador para que os usuários finais gerenciem seus bancos de dados e cotas. Os usuários podem usar a caixa de diálogo Caches and databases (Caches e bancos de dados) para remover bancos de dados individuais. Outra opção é remover todos os bancos de dados usando a caixa de diálogo Excluir histórico de navegação para marcar a caixa de seleção "Cookies and Web site data" (Cookies e dados de sites).

Captura de tela da nova guia Caches and databases da caixa de diálogo Website Data Settings (Configurações de dados de sites). Isso permite controlar se os sites podem criar caches e bancos de dados e o tamanho desses caches e bancos de dados.Captura de tela da caixa de diálogo Excluir histórico de navegação mostrando o novo texto da opção Cookies que inclui dados de sites, especialmente bancos de dados criados pelos sites.
Capturas de tela da nova guia Caches and databases da caixa de diálogo Website Data Settings e da caixa de diálogo atualizada Excluir histórico de navegação.

Olhando para a frente

O Grupo de trabalho do WebApp do W3C continua finalizando o IndexedDB por meio de aperfeiçoamentos importantes e reduções no número e escopo de alterações feitas à especificação. Trata-se de uma etapa importante para os desenvolvedores da Web que forem usar essa tecnologia em breve, no Windows 8 e IE10.

Desejamos saber como você usará o IndexedDB nos seus sites e aplicativos. Seus comentários sobre o IndexedDB no IE10 são bem-vindos.

—Israel Hilerio, Ph.D., gerente de programas geral, Internet Explorer