Mam problem z siecią po dodaniu ikony do ekranu głównego. Jeśli Internet jest uruchamiany z ekranu głównego, wszystkie łącza otworzą się w nowym oknie w Safari (i utracą funkcjonalność pełnego ekranu). Jak mogę temu zapobiec? Nie mogłem znaleźć żadnej pomocy, tylko to samo pytanie bez odpowiedzi.
iphone
safari
iphone-standalone-web-app
Pavel Linkesch
źródło
źródło
scope
parametru wmanifest.json
. Zobacz moją odpowiedź, aby uzyskać więcej informacji. Przetestowałem to w iOS 11.3 i działa.Odpowiedzi:
Znalazłem rozwiązanie JavaScript w ramach iWebKit :
źródło
[].forEach.call(document.links, function(link) { link.addEventListener("click", function(event) { event.preventDefault(); window.location = this.href; }) });
Inne rozwiązania tutaj albo nie uwzględniają linków zewnętrznych (które prawdopodobnie chcesz otworzyć zewnętrznie w Safari) lub nie uwzględniają linków względnych (bez domeny w nich).
Projekt html5 mobile-boilerplate zawiera linki do tego streszczenia, które ma dobrą dyskusję na ten temat: https://gist.github.com/1042026
Oto ostateczny kod, który wymyślili:
źródło
Jeśli używasz jQuery, możesz:
źródło
this.href
zamiast rzutowania do obiektu jQuery, ale dzięki za tę odpowiedź. Działa na iOS6.To działa dla mnie na iOS 6.1 i z linkami Bootstrap JS (tj. Menu rozwijane itp.)
źródło
$('a').on('click'
funkcję (e) {`na$('area').on('click'
funkcję (e) {`, ale to też nie działa. Jakieś pomysły?a
pomocąhref="#"
, możesz być bardziej szczegółowy w selektorze jquery, np.$('a[href!="#"]')
To jest stare pytanie i wiele rozwiązań tutaj wykorzystuje JavaScript. Od tego czasu wydano iOS 11.3 i możesz teraz używać elementu członkowskiego zakresu . Element członkowski zakresu to adres URL podobny do tego, w
"/"
którym wszystkie ścieżki w tym zakresie nie otwierają nowej strony.Oto mój przykład:
Możesz również przeczytać więcej na ten temat tutaj . Polecam również użycie generatora, który zapewni taką funkcjonalność.
źródło
Na podstawie odpowiedzi Davidsa i komentarza Richardsa należy przeprowadzić kontrolę domeny. W przeciwnym razie w Twojej aplikacji internetowej zostaną otwarte również linki do innych witryn internetowych.
źródło
Jeśli używasz jQuery Mobile, zobaczysz nowe okno, używając atrybutu data-ajax = 'false'. W rzeczywistości stanie się to za każdym razem, gdy ajaxEnabled zostanie wyłączony, będąc przez i zewnętrznym łączem, przez ustawienie $ .mobile.ajaxEnabled lub przez posiadanie atrybutu target = ''.
Możesz to naprawić, używając tego:
(Podziękowania dla Richarda Poole'a za metodę live () - nie działało z bind ())
Jeśli globalnie wyłączyłeś ajaxEnabled, musisz porzucić [data-ajax = 'false'].
Zajęło mi to dość dużo czasu, aby się zorientować, ponieważ spodziewałem się, że będzie to problem specyficzny dla jQuery Mobile, podczas gdy w rzeczywistości to linkowanie Ajax faktycznie blokowało nowe okno.
źródło
Ten kod działa na iOS 5 (działał dla mnie):
W tagu head:
W linku, który chcesz otworzyć w tym samym oknie:
Mam ten kod z tego komentarza: metatagi aplikacji internetowej na iPhone'a
źródło
Może powinieneś zezwolić na otwieranie linków w nowym oknie, gdy cel jest jawnie ustawiony na „_blank”:
źródło
Znalazłem taki, który jest bardzo kompletny i wydajny, ponieważ sprawdza, czy działa tylko pod samodzielną aplikacją internetową, działa bez jQuery i jest również prosty, właśnie przetestowany pod iOS 8.2:
Pozostań samodzielny: Blokuj łącza w samodzielnych aplikacjach internetowych otwierających Mobile Safari
źródło
Możesz też prawie normalnie tworzyć linki:
Możesz też usunąć hash tag i href, wszystko, co robi, wpływa na wygląd.
źródło
Oto, co zadziałało na mnie na iOS 6 (bardzo nieznaczna adaptacja odpowiedzi rmarschera):
źródło
Jest to nieco zaadaptowana wersja Seana, która blokowała przycisk Wstecz
});
źródło
Dla tych z Twitter Bootstrap i Rails 3
Usuwanie linków nadal działa w ten sposób.
źródło
Wolę otwierać wszystkie linki w trybie samodzielnej aplikacji internetowej z wyjątkiem tych, które mają target = "_ blank". Oczywiście przy użyciu jQuery.
źródło
Jednym z obejść, które zastosowałem w aplikacji internetowej na iOS, było to, że wszystkie linki (które były przyciskami w CSS) tworzyłem przyciski przesyłania. Więc otworzyłem formularz, który wysłał do linku docelowego, a następnie input type = "submit" Nie jest to najlepszy sposób, ale to jest to, co odkryłem, zanim znalazłem tę stronę.
źródło
Utworzyłem pakiet instalowalny bower z odpowiedzi @ rmarscher, którą można znaleźć tutaj:
http://github.com/stylr/iosweblinks
Możesz łatwo zainstalować fragment za pomocą altany za pomocą
bower install --save iosweblinks
źródło
W przypadku użytkowników
JQuery Mobile
powyższe rozwiązania powodują przerwanie wyskakującego okna dialogowego. Zachowa to linki w aplikacji internetowej i pozwoli na wyświetlanie wyskakujących okienek.Można to również zrobić poprzez:
źródło
Oto, czego użyłbym dla wszystkich linków na stronie ...
Jeśli używasz jQuery lub Zepto ...
źródło
Możesz po prostu usunąć ten metatag.
źródło