Отображение внутри iframe файла html, расположенного вне www folder - работает в InAppBrowser или разбирает текст - PullRequest
0 голосов
/ 13 апреля 2020

Мне удалось загрузить некоторые ресурсы по требованию в мое приложение Cordova с помощью созданного мной пользовательского плагина.

Теперь мне нужно загрузить их в iframe в моем приложении. Возможно ли это?

Если бы они находились в (вздох, только для чтения) www folder, я мог бы просто указать на ${cordova.file.applicationDirectory}/www/game.html
... но находясь в папке библиотеки (например, см. путь ниже) есть ли способ отобразить их внутри iframe?
('/ var / mobile / Library / OnDemandResources / AssetPacks / 2F2887A0-7B16-4S5D-83C2-1C588A69DA80 / 15533301173473852725 / com.us-company.sports-beta-enterprise.asset-pack-5a105e8b9d10e3329780d62ea2265d8a.assetpack / game. html ')


Единственный способ, которым мне удалось их отобразить пока что это:

1. InAppBrowser с использованием пути cdvfile: // localhost (см. ниже) -> но я бы хотел избежать этого
(cdvfile: // локальный / корень / Users / пользователь / Library / Developer / CoreSimulator / Devices / D016D3B C -E9F9-43F2-8EC1-9A471819A9B5 / данные / Library / OnDemandResources / AssetPacks / 11129225- E96A-4Be C -9051-735912378DB0 / 15538308173473832725 / com.us-компания-us.sports-бета-enterprise.asset-пак-5a105e8b9d40e1329780d62ea2265 d8a.assetpack / flying-block-game. html)

2. Синтаксический анализ текста html с помощью document.createRange + createContextualFragment -> становится сложным в управлении для нетривиальных игр.

Любая помощь, отображающая это внутри iframe в самом приложении, так что все запросы go через движок Ioni c и мой собственная iosapp: // пользовательская схема вместо cdvfile: // localhost (что может привести к блокировке CORS)?

В качестве альтернативы, она будет работать с использованием другой плагин для локального веб-сервера, который обслуживает загруженные файлы ODR?

Github выпуск

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Я легко исправил свою проблему, используя cordova-plugin-ioni c -webview's window.Ionic.WebView.convertFileSrc:

Игра корректно загружается в iframe в моем приложении Cordova следующим образом:

var iframe = document.createElement('iframe');
iframe.src = window.Ionic.WebView.convertFileSrc('file:////Users/gsacchi/Library/Developer/CoreSimulator/Devices/D016D2BC-E9F9-43F2-8EC1-9A471819A9B5/data/Library/OnDemandResources/AssetPacks/11159225-E96A-4BEC-9051-735912378DB0/15538308173473832725/com.company-us.sports-beta-enterprise.asset-pack-5a105e8b9d40e2329780d62ea2265d8a.assetpack/flying-block-game.html');
var target = document.body.appendChild(iframe);

Что касается проблем с CORS, третьи стороны обычно не имеют файла белого списка: /// или localhost, однако хорошая новость заключается в том, что запросы, отправляемые из iframe, имеют то же пользовательское имя хоста и схему, что и приложение, поэтому Проблемы с CORS!

0 голосов
/ 13 апреля 2020

Интересно, кто применяет www constraint, может быть, это то, что я могу раскошелиться и изменить ... В этом случае я смогу загрузить отдельные игры внутри iframe, встроенного в приложение с обслуживанием ioni c -webview и многое другое легко решить проблему с CORS, поскольку я могу положиться на свою пользовательскую схему и домен приложения, заданные в качестве предпочтения в конфигурации. xml.

Это код плагина:

-(NSString *) getStartPath {
    NSString * wwwPath = [[NSBundle mainBundle] pathForResource:@"www" ofType: nil];
    NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
    NSString * persistedPath = [userDefaults objectForKey:CDV_SERVER_PATH];
    if (![self isDeployDisabled] && ![self isNewBinary] && persistedPath && ![persistedPath isEqualToString:@""]) {
        NSString *libPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
        NSString * cordovaDataDirectory = [libPath stringByAppendingPathComponent:@"NoCloud"];
        NSString * snapshots = [cordovaDataDirectory stringByAppendingPathComponent:@"ionic_built_snapshots"];
        wwwPath = [snapshots stringByAppendingPathComponent:[persistedPath lastPathComponent]];
    }
    self.basePath = wwwPath;
    return wwwPath;
}

.. Я хотел бы предположить, что что-то вроде этого должно работать, указывая на папку ODR загруженных игр:

NSString *odrPath= [[NSBundle mainBundle] pathForResource:@"games" ofType: nil];

Не уверен, что было бы возможно, чтобы оба экземпляра работали одновременно, хотя ..

Дополнительные вопросы для обсуждения в канале Кордовы: https://cordova.slack.com/archives/C068CHRJ5/p1586747888233400

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...