2010-12-03 5 views
0

Nous avons une application iPhone qui est essentiellement un site Web encapsulé dans une application. Cette application charge les fichiers HTML et JS à partir du disque local et l'interaction est effectuée dans JS. Cependant, avec iOS 4.2, le JS a commencé à recevoir "SECURITY_ERR: DOM Exception 18" lors de l'ouverture d'une base de données, et par conséquent, notre application ne fonctionne pas du tout. Le même fichier a fonctionné correctement dans les versions antérieures d'iOS et fonctionne correctement lorsqu'il est chargé à partir d'un serveur Web.Comment ouvrir la base de données dans Mobile Safari à partir de JS chargé à partir du disque

Existe-t-il un moyen de configurer iOS pour permettre à JS s'exécutant dans un fichier local d'accéder à une base de données?

Merci!

Kevin

+0

Pour clarifier, le JS s'exécute dans un UIWebView avec des fichiers html et js stockés localement. –

Répondre

1

Je suppose que je devrais répondre à cette question puisque je ne reçois enfin une réponse d'Apple Developer Support confessant ce bogue dans iOS4.

Le problème spécifique est lorsque vous chargez un WebView à l'aide de [WebView loadData ...]. Lorsqu'il est chargé de cette façon, webKit n'autorise pas l'accès aux bases de données. Si le même appel est modifié pour utiliser [webView loadRequest ...], les bases de données sont autorisées.

Il est un exemple de code pour démontrer le problème ici: http://code.google.com/p/iui/source/browse/sandbox/hybrid/HybridiUI/Classes/HybridiUIAppDelegate.m

Le même bug, en passant, existe dans Google Chrome, qui utilise également WebKit. Lors du chargement d'un site Web à partir d'un fichier local dans Chrome, les bases de données et les appels AJAX sont interdits, mais lors du chargement à partir d'un serveur Web, ils sont autorisés.

1

Je crois que vous dépassez la taille limite de 5 Mo pour la base de données.

Au moins c'est la seule façon que je peux trouver pour répliquer ce message d'erreur.

Le navigateur empêche normalement une application web emballement d'utiliser les ressources locales excessives en fixant limites de la taille de la base de données de chaque site. Lorsqu'un changement de base de données entraînerait la base de données à dépasser cette limite , l'utilisateur est notifié et a demandé pour obtenir l'autorisation de permettre à la base de données de se développer davantage.

Si vous savez que vous allez être remplir la base de données avec beaucoup de contenu , vous devez spécifier une taille suffisante ici. Ce faisant, l'utilisateur est seulement demandé une permission une fois lorsque créant la base de données au lieu de tous les quelques mégaoctets que la base de données se développe.

Le navigateur peut fixer des limites sur la façon dont grande valeur que vous pouvez spécifier pour ce champ , mais ne sont pas encore entièrement défini les détails de ces limites .

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

+0

J'ai eu le même problème. Une taille de 20 Mo fonctionnait bien dans Chrome et sur iOS 4.3, mais sur 4,2, j'ai continué à obtenir cette erreur jusqu'à ce que je l'ai réduit à 5 Mo. –

Questions connexes