Как открыть базу данных в Mobile Safari из JS, загруженного с диска - PullRequest
0 голосов
/ 04 декабря 2010

У нас есть приложение для iPhone, которое по сути является веб-сайтом, инкапсулированным в приложение. Это приложение загружает файлы HTML и JS с локального диска, и взаимодействие выполняется в JS.

Однако в iOS 4.2 JS начал получать «SECURITY_ERR: DOM Exception 18» при открытии базы данных, и в результате наше приложение вообще не работает. Точно такой же файл отлично работал в предыдущих версиях iOS и прекрасно работает при загрузке с веб-сервера.

Есть ли способ настроить iOS, чтобы JS, работающий в локальном файле, мог обращаться к базе данных?

Спасибо!

Kevin

Ответы [ 2 ]

1 голос
/ 29 января 2011

Полагаю, мне следует ответить на этот вопрос, поскольку, наконец, я получил ответ от службы поддержки разработчиков Apple, признавая это ошибкой в ​​iOS4.

Конкретная проблема заключается в том, что вы загружаете веб-представление с помощью [webView loadData ...]. При такой загрузке webKit не разрешает доступ к базам данных. Если один и тот же вызов изменен на использование [webView loadRequest ...], базы данных разрешены.

Здесь приведен пример кода для демонстрации проблемы: http://code.google.com/p/iui/source/browse/sandbox/hybrid/HybridiUI/Classes/HybridiUIAppDelegate.m

Такая же ошибка, между прочим, существует в Google Chrome, который также использует webKit. При загрузке веб-сайта из локального файла в Chrome базы данных и вызовы AJAX запрещены, но при загрузке с веб-сервера они разрешены.

1 голос
/ 20 января 2011

Я считаю, что вы превысили размер базы данных в 5 МБ.

По крайней мере, это единственный способ найти это сообщение об ошибке.

Браузер обычно предотвращает убегающее веб-приложение от использования чрезмерные местные ресурсы путем установки ограничения на размер каждого сайта база данных. Когда изменение базы данных будет заставить базу данных превысить это лимит, пользователь уведомляется и спрашивается за разрешение разрешить базу данных расти дальше.

Если вы знаете, что будете заполнение базы данных с большим количеством содержание, вы должны указать достаточно Размер здесь. Таким образом, пользователь только один раз спрашивал разрешения, когда создавая базу данных вместо каждого несколько мегабайт по мере роста базы данных.

Браузер может устанавливать ограничения на то, как большое значение, которое вы можете указать для этого поле, но детали этих ограничений еще не определены полностью.

http://developer.apple.com/library/safari/#documentation/iPhone/Conceptual/SafariJSDatabaseGuide/UsingtheJavascriptDatabase/UsingtheJavascriptDatabase.html%23//apple_ref/doc/uid/TP40007256-CH3-SW2

...