Использование handleOpenURL с настраиваемой схемой URL в Кордове

Я занимаюсь разработкой приложения и почти все выяснил, за исключением плагина пользовательской схемы URL (https://github.com/EddyVerbruggen/Custom-URL-scheme). Я успешно установил плагин и настроил собственную схему URL-адресов signrestaurantandbar. Поэтому, когда я использую signrestaurantandbar://, мое приложение открывается. Проблема, с которой я сталкиваюсь, заключается в обработке URL. В файле readme говорится, что я могу использовать для этого функцию handleOpenURL (URL), но у меня все еще возникают проблемы при попытке загрузить определенную страницу в приложении.

Вот что я попробовал:

function handleOpenURL(url) {
      var strValue = url;
      strValue = strValue.replace('signsrestaurantandbar://','');
      window.location.href = strValue + ".html";
  }

Я помещаю это в мою страницу index.html... хотя она должна открывать page.html при загрузке signrestaurantandbar://page, она не делает это должным образом. В моей консоли chrome написано, что она загрузила страницу, но она выглядит пустой без каких-либо ошибок, и это происходит только один раз. Когда я пытаюсь загрузить signrestaurantandbar://page второй раз, он просто загружает приложение.

Буду признателен за любые советы о том, как подходить к загрузке определенных страниц с использованием пользовательской схемы URL.

Ответ 1

Вам нужно убедиться, что вы указали свой "пользовательский" URL в своем CSP.

Добавлено 2016-02-11: ПРИМЕЧАНИЕ: ВАШЕ ПРИЛОЖЕНИЕ СЕЙЧАС НЕЗАВИСИМО. ЭТО ПОДТВЕРЖДАЕТ ВАМ ЗАЩИЩАТЬ ВАШЕ ПРИЛОЖЕНИЕ.

Он будет выглядеть примерно так:

<meta http-equiv="Content-Security-Policy" 
         content="default-src * signsrestaurantandbar:; 
                  style-src * 'self' 'unsafe-inline' 'unsafe-eval'; 
                  script-src * 'self' 'unsafe-inline' 'unsafe-eval';">

Обычно параметр подстановочного знака (*) может обрабатывать большинство приложений, но не ваш "настраиваемый" протокол.
ПРИМЕЧАНИЕ. Условные настройки могут содержать ваше приложение из "App Store".

Вам также может потребоваться добавить к вашему config.xml

<allow-intent href="signsrestaurantandbar:" />

Эта таблица с белым списком должна помочь. КАК применить Кордову/Телефонную гучку в белой системе

Вы также должны прочитать белую таблицу, особенно раздел <allow-intent (...) /> - Best of Luck

Ответ 2

Добавьте глобальную функцию handleOpenURL с помощью этого кода:

window.handleOpenURL = function(url) {
  console.log(">>>>>>>>>>>>>>>>>>>");
  // do stuff, for example
  // document.getElementById("url").value = url;
  console.log(url);
};

См. Обработка пользовательских URL-адресов Кордовы.

Обратите внимание, что если вы используете alert в этой функции, приложение будет зависать:

Вы не можете запускать какие-либо интерактивные функции, такие как предупреждения в коде handleOpenURL, если вы это сделаете, ваше приложение будет висеть. Аналогично, вы не должны вызывать любые API-интерфейсы Cordova, если вы не перенесите его сначала в вызове setTimeout с нулевым значением тайм-аута.

Преимущество этого метода заключается в том, что вам не нужно изменять политику безопасности контента, используя метатег Content-Security-Policy.