2017-06-10 165 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"