Невозможно открыть локальный файл с помощью Cordova Inappbrowser на платформе Windows 8.1

Я занимаюсь разработкой приложения для устранения разрыва телефона, и недавно мы добавили поддержку платформы Windows 8.1. Приложение загружает / создает файлы, которые сохраняются на устройстве с помощью API Cordova FileSystem.

Я успешно сохранил файл на устройстве, используя URL-адрес, который выглядит следующим образом

ms-appdata:///local/file.png

Я проверил на своем компьютере, и файл доступен для просмотра в папке LocalState в корневой папке приложения. Однако, когда я пытаюсь открыть этот файл с помощью inAppBrowser, ничего не происходит; об ошибках не сообщается, и ни одно из событий по умолчанию в inAppBrowser не запускается.

function empty() { alert('here'); } //never fires
var absoluteUrl = "ms-appdata:///local/file.png";
cordova.InAppBrowser.open(absoluteURL, "_blank", "location=no", { loadstart: empty, loadstop: empty, loaderror: empty });

Я проверил, что URL-адрес действителен, вызвав следующий встроенный JavaScript на URL

Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).done(function (file) {
                debugger; //the file object contains the correct path to the file; C:\...etc.
            });

Кроме того, добавление url в качестве src для тега img работает, как и ожидалось.

Я также попытался подключить обработчики inAppBrowser с помощью addEventListener("loadstart") и т. Д., Но ни один из них не запускается либо. Однако, когда я пытаюсь открыть " http://www.google.com/", события запускаются, и на экране появляется inAppBrowser.

После осмотра DOM я вижу, что элемент inAppBrowser был добавлен, но он не имеет установленного атрибута источника

<div class="inAppBrowserWrap">
    <x-ms-webview style="border-width: 0px; width: 100%; height: 100%;"></x-ms-webview>
</div>

Я смотрел на другие вопросы, такие как этот, но безрезультатно. Я подтвердил, что

а) InAppBrowser установлен

б) устройство сработало

Я также попытался изменить цель на "_self" (та же проблема) и "_system" (всплывающее окно, в котором говорится, что вам нужно новое приложение, чтобы открыть файл типа msappdata://), и у меня заканчиваются идеи. Кто-нибудь сталкивался с подобными проблемами?

2 ответа

У меня была похожая проблема. Мое приложение cordova загружает файл, а затем открывает его в собственном браузере (чтобы изображения, файлы PDF и т. Д. Обрабатывались правильно).

В конце концов мне пришлось изменить InAppBrowserProxy.js класс (часть плагина InAppBrowser для платформы Windows).

Это код, который открывает файл (обычный JavaScript):

// This value comes from somewhere, I write it here as an example
var path = 'ms-appdata:///local//myfile.jpg';

// Open file in InAppBrowser
window.open(path, '_system', 'location=no');

Затем я обновил файл InAppBrowserProxy.js (в разделе platforms\windows\www\plugins\cordova-plugin-inappbrowser\src\windows). Я заменил этот фрагмент кода:

if (target === "_system") {
    url = new Windows.Foundation.Uri(strUrl);
    Windows.System.Launcher.launchUriAsync(url);
}

Этим:

if (target === "_system") {
    if (strUrl.indexOf('ms-appdata:///local//') == 0) {
        var fileName = decodeURI(strUrl.substr(String(strUrl).lastIndexOf("/") + 1));
        var localFolder = Windows.Storage.ApplicationData.current.localFolder;

        localFolder.getFileAsync(fileName).then(function (file) {
            Windows.System.Launcher.launchFileAsync(file);
        }, function (error) {
            console.log("Error getting file '" + fileName + "': " + error);
        });
    } else {
        url = new Windows.Foundation.Uri(strUrl);
        Windows.System.Launcher.launchUriAsync(url);
    }
}

Это очень специальный взлом, но он помог мне, и его можно улучшить, расширить и даже стандартизировать.

Во всяком случае, могут быть другие способы добиться этого, просто это работает для меня...

После дополнительных поисков кажется, что x-ms-webview, который является базовым компонентом, используемым PhoneGap для Windows, поддерживает только загрузку содержимого HTML. В этом сообщении блога Microsoft о контроле веб-представления говорится, что

UnviewableContentIdentified - запускается, когда пользователь переходит к содержимому, отличному от веб-страницы. Элемент управления WebView способен отображать только HTML-контент. Он не поддерживает отображение автономных изображений, загрузку файлов, просмотр документов Office и т. Д. Это событие вызывается, чтобы приложение могло решить, как справиться с ситуацией.

В этой статье предлагается рассмотреть пространство имен Windows.Data.Pdf для обеспечения поддержки чтения PDF-файлов в приложении.

Другие вопросы по тегам