Пример API Dropbox Javascript Datastores в Phonegap обеспечивает создание фрейма с ошибкой для приложения Windows8

#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? я могу выбирать файлы, которых нет в папке, но файлы в папке не выбираются.