2017-06-10 171 views
0

我想让InAppBrowser显示托管在我的iOS设备上的Cordova本地Web服务器上的本地文件。 但是,它只是在底部带有一个“Loading ...”栏的空白页面。科尔多瓦InAppBrowser卡在加载

我已经搜索周围的解决方案,但他们似乎都回到白名单和内容安全策略,我已分别包括在我的config.xml和index.html。

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;"> 
... 

我尝试使用

// 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'); 

的模式打开,打开该文件,但只有 “正在加载...”栏显示完成和导航按钮。 (这也是所有后deviceready

我能够检查实例与Safari以及似乎没有什么被加载到实例(约:空白)。

我甚至有

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

尝试和该卡上加载为好。

如果我使用'_self'而不是'_blank',一切都会加载,但它会占用我应用程序的Cordova Webview实例,这不是我想要的。使用'_system'打开系统浏览器,但不允许我显示来自我的Cordova本地Web服务器的文件。

任何人都可以请我指出正确的方向使我的本地文件或网页显示通过模态使用InAppBrowser在iOS?

我使用:

科尔多瓦7.0.1

科尔多瓦 - 插件白名单1.0.0 “白名单”

科尔多瓦 - 插件 - inappbrowser 1.7.1 “InAppBrowser”

谢谢你的帮助!

回答

0

调试这一点,并在一个星期寻找答案了之后,我发现我的问题的解决方案,可通过文档,并通过插件代码寻找:

首先,显示任何网页时,我发现了同样的解决方案,因为这用户从这个问题:

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已经1从应用程序实例,所以InAppBrowser从未加载的网址。我找不到Cordova​​3210的任何偏好来更改此流程,但上面的链接提供了一种解决方法。


其次,显示在科尔多瓦本地Web服务器上的文件,我只好跟着文档:

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

为了限制访问你的应用程序,请求仅限于本地主机并受到身份验证令牌的保护。 这应该有效地限制您的应用程序访问服务器。

文档不是很透彻,但是在我的iOS应用科尔多瓦的身份验证令牌传递作为一个PARAM到应用程序的URL document.location.search。所以,我的JS归结为:

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

我也删除InAppBrowser的PDF检验逻辑,从它的插件代码,以摆脱其控制台输出,和它的作品如预期

cordova-plugin-inappbrowser 1.7.1 "InAppBrowser"