Я провел много исследований по этой проблеме, но ни одно решение не помогло мне. Теперь я решил спросить себя. Также я довольно новичок в теме в целом.
Так в чем моя проблема? На самом деле это выглядит довольно просто. Я получил приложение Cordova, и я также использую Quasar v0.13, и целью является Ipad с iOS 9+. В этом приложении есть список документов, где пользователь может сначала скачать файл, а затем открыть его. Эти файлы (ppt / pptx) должны затем открываться в Powerpoint, когда на них нажимают, но они этого не делают. Я понял, что Powerpoint открывается, но затем выдает ошибку, в которой просто говорится, что он не может открыть файл. В этом сообщении об ошибке отображается правильный путь к файлу.
И теперь я не знаю больше. Итак, вот что я уже пробовал:
1. Использование файла Open2-плагин для кордова
Этот плагин на самом деле работает довольно хорошо. Он открывает файлы, но открывает их в приложении. Поэтому я прочитал документацию, в которой говорится, что вы можете открывать файлы с помощью другого приложения, устанавливая второй аргумент в Open-Method. Этот второй аргумент должен быть MIME-типом приложения, с которым вы хотите открыть файл. Итак, я сделал это:
openItem: function (fullPath) {
return cordova.plugins.fileOpener2.open(fullPath,'application/vnd.openxmlformats-officedocument.presentationml.presentation',{
error : function(e) {
console.log('Error status: ' + e.status + ' - Error message: ' + e.message);
},
success : function () {
console.log('file opened successfully');
}
});}
Я попробовал несколько MIME-типов, но ничего не произошло. Файлы все еще открывались в моем приложении Cordova. Не было никаких изменений в поведении и не было зарегистрировано ни одной ошибки. Он просто сказал «Файл успешно открыт». Поэтому я проверил папку, в которую загружаются файлы. Это documentsDirectory , и другие приложения должны иметь возможность работать с файлами, хранящимися там, если я правильно понял. Я провел некоторое исследование по этой проблеме, но другие решения, похоже, не помогли. Переменная fullPath имеет следующую структуру: file: /// + path, как это также показано в документации cordova.
Итак, поскольку это не сработало, я попытался открыть файлы через Cordova в AppBrowser.
2. Использование Corodova InAppBrowser-Plugin
Проведя немного больше исследований, я обнаружил, что URL с конкретным префиксом Powerpoint может работать. Так что это должно быть что-то вроде «ms-powerpoint: + fileURL». Затем я добавил префикс в мой файл config.xml cordova и список info.plist.
config.xml
<platform name="ios">
<allow-intent href="ms-powerpoint:*" />
<allow-navigation href="ms-powerpoint:*" />
</platform>
info.plist:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>ms-powerpoint</string>
</array>
Я также использовал плагин AppAvailability, чтобы проверить, действительно ли префикс жизнеспособен. Оказалось, что это так. Поэтому мой код для открытия InAppBrowser выглядит так:
openItem: function (fullPath) {
const changedFullPath = "ms-powerpoint:ofv|u|" + fullPath;
const changedFullPathEncoded = "ms-powerpoint:" + encodeURIComponent(fullPath);
const shortFullPath = "ms-powerpoint:" + fullPath;
console.log('electron.shell.openItem: ' + fullPath);
console.log('electron.shell.openItem: ' + changedFullPath);
console.log('electron.shell.openItem: ' + changedFullPathEncoded);
console.log('electron.shell.openItem: ' + shortFullPath);
return cordova.InAppBrowser.open(changedFullPath, '_blank');}
Это открыло Powerpoint, но с сообщением об ошибке, которое я упоминал выше. Powerpoint говорит, что не может открыть файл. Как видите, я пробовал разные версии URL. Я попробовал закодированный путь к файлу и расширил префикс, и было только одно отличие. Когда я попробовал закодированную версию, powerpoint напечатал весь путь к файлу в своем сообщении об ошибке. Когда он не был закодирован, отображалось только имя файла. Кроме того, когда я использовал другой аргумент, чем «_blank» powerpoint не открывался, то же самое происходило, когда я кодировал префикс.
Итак, это так. Я почти уверен, что совершаю какую-то глупую ошибку, но у меня закончились идеи. Возможно, я должен расширить URL-адрес немного больше? Я очень ценю вашу помощь.
Заранее большое спасибо!