Невозможно открыть локальный файл с помощью 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-файлов в приложении.