2017-06-10 2 views
0

J'essaie d'obtenir que l'InAppBrowser affiche un fichier local hébergé sur le serveur Web local Cordova sur mon appareil iOS. Cependant, il vient juste avec une page blanche avec "Loading ..." barre en bas. J'ai cherché des solutions, mais elles semblent toutes revenir à la politique de sécurité de la liste blanche et du contenu, que j'ai déjà incluse dans mes fichiers config.xml et index.html, respectivement.Cordova InAppBrowser bloqué lors du chargement

config.xml

... 
<access origin="*" /> 
<allow-intent href="*" /> 
<allow-navigation href="*" /> 
.... 

index.html

... 
<meta http-equiv="Content-Security-Policy" content="default-src * gap://ready file:; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://*.gstatic.com https://*.googleapis.com;"> 
... 

je tente d'ouvrir le fichier en utilisant

// url is "http://localhost:8080/local-filesystem/Users/<user>/Library/Developer/CoreSimulator/Devices/E22F3966-CA8B-43E4-890B-EB078C437F54/data/Containers/Data/Application/146AFBF3-5CFF-47D1-9D51-85CFC5676761/Documents/NoCloud/Download/00P1J00000UGDF9UAP_test.pdf" 
cordova.InAppBrowser.open(url, '_blank', 'location=yes'); 

Le modal ouvre, mais seulement "Chargement ..." La barre est affichée avec les boutons Terminé et Navigation. (Ceci est aussi tout après deviceready)

Je peux aussi inspecter l'instance avec Safari et il semble que rien n'est chargé sur l'instance (environ: vide).

J'ai même essayé avec

cordova.InAppBrowser.open('http://google.com', '_blank', 'location=yes'); 

Et qui se coince sur le chargement aussi bien. Si j'utilise '_self' au lieu de '_blank', tout se charge, mais il prend en charge l'instance Cordova Webview de mon application, ce qui n'est pas ce que je veux. L'utilisation de '_system' ouvre le navigateur du système, mais ne me permet pas d'afficher les fichiers de mon serveur Web local Cordova.

Quelqu'un peut-il me diriger vers la bonne direction pour afficher mon fichier local ou ma page Web via modal en utilisant InAppBrowser sur iOS?

J'utilise:

Cordova 7.0.1

cordova-plugin-whitelist 1.0.0 "liste blanche"

cordova-plugin-inappbrowser 1.7.1 "InAppBrowser"

Merci de votre aide!

Répondre

0

Après le débogage cela et la recherche de réponses pour plus d'une semaine, j'ai trouvé des solutions à mon problème grâce à la documentation et à la recherche par le code du plugin:

Tout d'abord, pour afficher une page Web, j'ai trouvé la même solution que cet utilisateur de cette question:

why does inAppBrowser open a blank new webview which i cant close

+ (void)acquireLock:(void (^)(NSInteger lockToken))block 
{ 
if (gCurrentLockToken == 0) { 
    gCurrentLockToken = ++gNextLockToken; 
    VerboseLog(@"Gave lock %d", gCurrentLockToken); 
    block(gCurrentLockToken); 
} else { 
    if (gPendingSetUserAgentBlocks == nil) { 
     gPendingSetUserAgentBlocks = [[NSMutableArray alloc] initWithCapacity:4]; 
    } 
    VerboseLog(@"Waiting for lock"); 
    [gPendingSetUserAgentBlocks addObject:block]; 
} 
} 

gCurrentLockToken était déjà 1 de l'instance de l'application, InAppBrowser n'a jamais chargé l'URL. Je ne pouvais pas trouver de préférences pour Cordova config.xml pour modifier ce flux, mais le lien ci-dessus fournit une solution de contournement.


En second lieu, pour afficher un fichier à Cordova serveur Web local, je devais suivre les docs:

https://www.npmjs.com/package/local-webserver

Afin de limiter l'accès à votre application, les demandes sont limitées à localhost et sont protégés avec un jeton d'authentification. Cela devrait effectivement limiter l'accès au serveur à votre application.

Documentation pour ce n'est pas très complet, mais dans ma demande Cordova dans iOS, le jeton d'authentification est transmis comme une URL dans l'param de l'application document.location.search. Donc, mon JS se résume à ceci:

cordova.InAppBrowser.open(url + document.location.search, '_blank', 'location=yes'); 

J'ai aussi retiré la logique de vérification pdf de InAppBrowser de son code de plugin pour débarrasser de ses sorties de la console, et il fonctionne comme prévu

cordova-plugin-inappbrowser 1.7.1 "InAppBrowser"