Использование 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
.