2013-12-02 6 views
0

Я хочу использовать indexedDB polyfill с кодом Dart, скомпилированным в Javascript. Когда я просто добавил необходимый скрипт, код dart2js не распознает свойство window.indexedDB как экземпляр IDBFactory и производит перехватчик UnknownJavaScriptObject.Как использовать javascript polyfills с dart2js

Я пытался заставить constructor.name на элементах polyfill, начал с indexedDB:

var shimIndexedDB = { 
     /** 
     * Force correct constructor name. 
     */ 
     constructor: function IDBFactory(){}, 

     /** 
     * The IndexedDB Method to create a new database and return the DB 
     * @param {Object} name 
     * @param {Object} version 
     */ 
     open: function(name, version){ 

Это был шаг вперед, перехватчик был правильным. К сожалению, когда я добавил аналогичную конструкцию в IDBOpenDBRequest, ее объект также получил IDBFactory-перехватчик.

Как правильно подключить объект и перехватчик?

ответ

1

Вы можете использовать библиотеку lawndart?

Он предоставляет общий API над локальным хранилищем, индексированным db и websql.

Из документов:

Вы можете использовать эту библиотеку, чтобы помочь справиться с широким спектром опций стороны клиента хранения. Вы должны иметь возможность написать свой код против интерфейса Lawndart и заставить его работать в браузерах, чтобы поддерживал хотя бы одно из следующего: локальное хранилище, индексированный db и websql.

Для того, чтобы получить полиномию javascript indexeddb, вам нужно будет вызвать его API через dart:js interop. Это, вероятно, будет намного сложнее, чем использование библиотеки, такой как lawndart. Вот article об использовании дротика: js interop.

+0

Lawndart кажется хорошим решением, я рассмотрю возможность интеграции этого проекта. Тем не менее, им нужен способ повторного использования javascript-прокладок для прозрачного резервного копирования с любой веб-функцией (которая может не иметь альтернативы библиотеки дарта). – MDerks

+0

Да - проблема заключается в том, чтобы подтянуть подкладку до Dart apis. Чтобы сделать это для этой прошивки indexeddb, вам, вероятно, потребуется изменить источник dart: html в самом проекте Dart. Другой вариант - скопировать dart: html indexeddb интерфейсы, а затем повторно реализовать их с помощью js interop. –

+0

Я заметил что-то новое в дроти: js сегодня. См. [JSObject.fromBrowserObject()] (https://api.dartlang.org/docs/channels/stable/latest/dart_js/JsObject.html#fromBrowserObject). Это должно помочь сделать полисы. –

 Смежные вопросы

  • Нет связанных вопросов^_^