Cordova InAppBrowser坚持加载

时间:2017-06-10 21:25:59

标签: ios cordova inappbrowser

我正在尝试让InAppBrowser在我的iOS设备上显示托管在Cordova Local Webserver中的本地文件。 但是,它只是在空白页面底部显示“正在加载...”栏。

我一直在寻找解决方案,但他们似乎都回到白名单和内容安全政策,我已经分别包含在我的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 Local Webserver中的文件。

有人可以指点我使用iOS上的InAppBrowser通过模式制作我的本地文件或网页的正确方向吗?

我正在使用:

Cordova 7.0.1

cordova-plugin-whitelist 1.0.0“Whitelist”

cordova-plugin-inappbrowser 1.7.1“InAppBrowser”

感谢您的帮助!

1 个答案:

答案 0 :(得分: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已经是app实例中的1,因此InAppBrowser从未加载过url。我找不到Cordova config.xml的任何偏好来更改此流程,但上面的链接提供了一种解决方法。

其次,要在Cordova Local Web Server中显示文件,我必须遵循以下文档:

  

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

     

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

这方面的文档不是很全面,但在iOS的Cordova应用程序中,身份验证令牌作为参数传入应用程序的URL document.location.search。所以我的JS归结为:

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

我还从其插件代码中删除了InAppBrowser的pdf检查逻辑,以摆脱其控制台输出,并且按预期工作

cordova-plugin-inappbrowser 1.7.1 "InAppBrowser"