#javascript #cordova #windows-8 #dropbox-api
#javascript #cordova #windows-8 #dropbox-api
Вопрос:
Я попытался создать приложение Phonegap, поддерживающее как Android, так и Windows8, для API Dropbox Javascript Datastores, в котором используется приведенный здесь пример: https://github.com/dropbox/cordova-datastores-example
Когда я создаю и запускаю приложение для Android, оно отлично работает на планшете Android. Но когда я запускаю приложение, созданное для Windows8, отображается ошибка: The app couldn't navigate to ... because of this error: FORBIDFRAMING
. И после этого ничего не происходит.
Я не смог найти альтернативу использованию фрейма. Я хотел бы знать, есть ли способ успешно запустить приложение Windows8 в этом примере, и где я бы изменил пример, чтобы заменить фрейм. (Или, если есть другой способ авторизации входа пользователя, чтобы мне не приходилось использовать фрейм.)
Спасибо.
Комментарии:
1. Я просто решаю ту же проблему. В настоящее время я пробую dropbox-js с помощью cordova authdriver. Но, похоже, это не работает.
2. Привет @sdepold, есть ли у вас какая-либо альтернатива, которую вы рассматриваете?
3. Я просто делаю несколько небольших шагов в правильном направлении. Как только я заработаю, я опубликую решение здесь.
4. Только что нашел эту ссылку: msdn.microsoft.com/en-us/library/windows/apps/dn301831.aspx Похоже, что на самом деле есть альтернатива iframes 🙂
Ответ №1:
Предпосылка
Это хакерское решение, которое, вероятно, будет перенесено на соответствующий запрос на извлечение из dropbox-js:
Подготовка:
- Загрузите клиент dropbox-js отсюда и поместите его в
js
папку проекта. - Убедитесь, что он указан в вашем «Обозревателе решений». Если это не так, щелкните правой кнопкой мыши по папке и добавьте ее через «Добавить -> Существующий элемент …».
- Добавить
dropbox.js
в свойdefault.html
. - Создайте новый файл. Я вызвал его
helpers.js
и добавил в свойdefault.html
. - Откройте ваш
package.appxmanifest
файл и объявите пользовательский протокол. (Объявления -> Выберите протокол из выпадающего списка -> Дайте ему имя (например, myapp)) - Перейдите в консоль приложений Dropbox и зарегистрируйте новое приложение.
- Добавьте URI перенаправления в зарегистрированное приложение :
myapp://dropbox
. Обратите внимание, что этоmyapp
ссылается на пользовательский протокол.
Шаг №1: добавление помощников
Добавьте следующее содержимое в helpers.js
: http://pastebin.com/qpZbv7YG
Шаг №2: добавьте поддержку обработчика протокола
Поскольку мы добавили пользовательский протокол в наше приложение и перенаправили uri в dropbox, нам нужно обработать вызов из dropbox. ваш default.js
app.addEventListener("activated", function (args) {
if (args.detail.kind === activation.ActivationKind.protocol) {
// the application has been called via the custom protocol
var requestUri = args.detail.uri.rawUri
, params = Dropbox.Util.Oauth.queryParamsFromUrl(requestUri)
AppHelpers.dropbox.setParams(params)
} else if (args.detail.kind === activation.ActivationKind.launch) {
/* you should have this alread in place */
}
})
Шаг #3: добавьте пользовательский AuthDriver в dropbox-js
Открыть dropbox.js и найдите линию:
Dropbox.AuthDriver.Cordova = (function (_super) {
Вставьте следующий код чуть выше этой строки:
Dropbox.AuthDriver.WinRT = (function (_super) {
__extends(WinRT, _super);
function WinRT(options) {
WinRT.__super__.constructor.call(this, options);
}
WinRT.prototype.url = function () {
return 'myapp://dropbox';
};
WinRT.prototype.doAuthorize = function (authUrl, stateParam, client, callback) {
var authHost, browser, onEvent, promptPageLoaded, removed,
_this = this;
var uri = new Windows.Foundation.Uri(authUrl);
Windows.System.Launcher.launchUriAsync(uri)
};
return WinRT;
})(Dropbox.AuthDriver.BrowserBase);
Пожалуйста, обратите внимание, что снова есть ссылка на наш пользовательский протокол.
Шаг #4: используйте dropbox
В helpers.js вы найдете вызываемую функцию sync
, которую я использую для
- проверьте, прошел ли пользователь уже аутентификацию. Если это еще не так, мы перенаправим его в dropbox.
- загрузите контактные данные пользователя и введите их в консоль.
По сути, вам просто нужно использовать MyHelpers.dropbox.getClient()
результирующий клиент и взаимодействовать с ним. Он вернет правильный экземпляр клиента dropbox
Заключительные слова
Надеюсь, это поможет! Вы можете найти доступные методы клиента здесь: http://coffeedoc.info/github/dropbox/dropbox-js/master/classes/Dropbox/Client.html#readFile-instance
Ответ №2:
Из https://github.com/apache/cordova-plugin-inappbrowser/blob/master/doc/index.md , похоже, что Windows на самом деле не поддерживается плагином InAppBrowser (который используется драйвером аутентификации Dropbox Cordova).
Комментарии:
1. Спасибо @smarx, значит ли это, что я не смогу использовать Dropbox для Windows?
2. Вы, конечно, могли бы без Cordova (т. Е. Без Использования фрейма). С Cordova я не совсем уверен. Возможно, вам придется написать собственный код для обработки части аутентификации Dropbox.
3. здравствуйте @smarx, скажите, пожалуйста, можем ли мы выбрать изображение или файл из папки dropbox в телефоне Android с помощью плагина dropbox cordova? я могу выбирать файлы, которых нет в папке, но файлы в папке не выбираются.