Начиная с iPhone OS 11.3, мое приложение не работает со следующей ошибкой:
SecurityError: Blocked attempt to use history.replaceState() to change session history URL from file:///var/containers/Bundle/Application/E73A3E4A-D961-4943-BAA3-7845E755F6A0/myplaceonline.app/www/index.html#/?phonegap=true to https://myplaceonline.com/?phonegap=true. Protocols, domains, ports, usernames, and passwords must match.
url:
file:///var/containers/Bundle/Application/E73A3E4A-D961-4943-BAA3-7845E755F6A0/myplaceonline.app/www/js/jquery.mobile-1.4.5.min.js
line #: 3 (31672)
Способ, которым я всегда это делал (и это продолжает работать с Android):
- Приложение PhoneGap загружает JQM на страницу index.html .
- Прикреплен обработчик событий JQM
mobileinit
, который регистрирует обработчик событий pageloaded
, который в конечном итоге вызывает loadHomepage .
- loadHomepage устанавливает
$.mobile.path.documentBase
и атрибут href
тега base
для моего удаленного сервера (https://myplaceonline.com/) и вызывает $.mobile.pageContainer.pagecontainer("change", "/", { allowSamePageTransition: true, transition: 'none', reloadPage: true, changeHash: true });
для загрузки удаленной домашней страницы.
- В конечном итоге это заставляет JQM вызывать replaceState, который завершается с ошибкой безопасности:
replaceState@[native code]
squash@file:///var/containers/Bundle/Application/E73A3E4A-D961-4943-BAA3-7845E755F6A0/myplaceonline.app/www/js/jquery.mobile-1.4.5.min.js:3:31672
go@file:///var/containers/Bundle/Application/E73A3E4A-D961-4943-BAA3-7845E755F6A0/myplaceonline.app/www/js/jquery.mobile-1.4.5.min.js:4:322
navigate@file:///var/containers/Bundle/Application/E73A3E4A-D961-4943-BAA3-7845E755F6A0/myplaceonline.app/www/js/jquery.mobile-1.4.5.min.js:4:1598
Цель всего вышеперечисленного заключается в том, чтобы я не уходил от file:///
, потому что если бы я это сделал, я бы потерял доступ ко всем родным JS API телефона через PhoneGap. Это работает на старых версиях iOS и продолжает работать на Android.
Есть какие-нибудь идеи относительно альтернативного способа сделать это, чтобы обойти более строгую безопасность в более новых версиях iOS? Кроме того, я вижу, что есть проблемы, такие как https://github.com/jquery/jquery-mobile/issues/5465, которые предлагают способ отключения истории, и мне интересно, будет ли это еще один обходной путь и что я потеряю?