Przez długi czas trzeba było korzystać z niestandardowych bibliotek i hakerów widżetów, żeby wyświetlać selektor daty. Platforma internetowa korzysta teraz z metody HTMLInputElement showPicker()
, czyli kanonicznego sposobu wyświetlania selektora przeglądarki nie tylko dla dat, ale też godziny, koloru i plików.
Wprowadzenie
Najczęstsze prośby zgłaszane przez programistów stron internetowych:
Jak automatycznie wyświetlać
Stack Overflow
selektor elementów, takich jak data?
Obecne odpowiedzi nie są zbyt dobre. Opierają się one na bibliotekach zewnętrznych, atakach CSS lub konkretnych zachowaniach przeglądarki, takich jak symulowanie interakcji użytkownika z click()
.
Z przyjemnością informuję, że to już koniec, gdy platforma internetowa wprowadzi kanoniczny sposób wyświetlania selektora przeglądarki dla elementów <input>
z tymi typami: "date"
, "month"
, "week"
, "time"
, "datetime-local"
, "color"
i "file"
. Działa też w przypadku elementów <input>
z sugestiami opartymi na <datalist>
lub "autocomplete"
, które omówimy również w tym artykule.
Jak wyświetlić selektor
Wywołanie showPicker()
w elemencie <input>
wyświetla użytkownikowi selektor przeglądarki. Musi być wywoływane w odpowiedzi na gest użytkownika, np. gest dotknięcia lub kliknięcie myszą. W przeciwnym razie nie powiedzie się z wyjątkiem NotAllowedError
.
Ze względów bezpieczeństwa spowoduje to wywołanie wyjątku SecurityError
w przypadku wywołania w elemencie iframe z innych domen.
Selektor przeglądarki wyświetla się, gdy element <input>
jest jednym z tych typów: "date"
, "month"
, "week"
, "time"
, "datetime-local"
, "color"
lub "file"
.
Przykład poniżej pokazuje, jak otworzyć selektor daty w przeglądarce.
<input type="date">
<button>Show the date picker</button>
<script>
const button = document.querySelector("button");
const dateInput = document.querySelector("input");
button.addEventListener("click", () => {
try {
dateInput.showPicker();
// A date picker is shown.
} catch (error) {
// Use external library when this fails.
}
});
</script>
Selektor przeglądarki może też być wstępnie wypełniony elementami z <datalist>
lub "autocomplete"
.
Przykład poniżej pokazuje, jak otworzyć selektor przeglądarki za pomocą polecenia <datalist>
.
<datalist id="ice-cream-flavors">
<option value="Chocolate"> </option>
<option value="Coconut"> </option>
<option value="Mint"> </option>
<option value="Strawberry"> </option>
<option value="Vanilla"> </option>
</datalist>
<input type="text" list="ice-cream-flavors">
<button>Show the suggestions</button>
<script>
const button = document.querySelector("button");
const iceCreamFlavorsInput = document.querySelector("input");
button.addEventListener("click", () => {
try {
iceCreamFlavorsInput.showPicker();
// A picker containing some ice cream flavors is shown.
} catch (error) {
// Use external library when this fails.
}
});
</script>
Wykrywanie funkcji
Aby sprawdzić, czy funkcja showPicker()
jest obsługiwana, użyj:
if ('showPicker' in HTMLInputElement.prototype) {
// showPicker() is supported.
}
Demonstracyjny
Na stronie https://show-picker.glitch.me/demo.html dostępna jest wersja demonstracyjna, w której możesz wypróbować wszystkie selektory obsługiwane przez przeglądarkę.
Obsługiwane przeglądarki
Aplikacja showPicker()
jest dostępna w Chrome 99 i nowszych.
Co dalej
W chwili tworzenia tego tekstu showPicker()
korzysta z platformy internetowej po raz pierwszy. W przyszłości możemy potrzebować dodatkowych dopracowania:
- W przyszłości możemy dodać do elementu
<select>
podobnyshowPicker()
, jeśli będą o to prosić programiści stron internetowych. - Atrybut
closePicker()
może się przydać i warto dodać go, jeśli deweloperzy stron internetowych o nie poprosi. - Można dodać zasadę uprawnień, która zezwala elementom iframe z innych domen na wyświetlanie selektorów przeglądarek, jeśli pozwala na to ich łańcuch nadrzędny.
Prześlij opinię
Zespół Chrome i społeczność zajmująca się standardami internetowymi chcą poznać Twoje wrażenia z korzystania z usługi showPicker()
.
Opowiedz nam o projekcie
Czy w usłudze showPicker()
jest coś, co nie działa zgodnie z Twoimi oczekiwaniami? A może brakuje metod lub właściwości, których potrzebujesz do realizacji pomysłu?
Masz pytanie lub komentarz na temat modelu zabezpieczeń?
- Zgłoś problem ze specyfikacją w repozytorium WhatWG na GitHubie lub dodaj swoje uwagi do istniejącego problemu.
Problem z implementacją?
Czy wystąpił błąd w implementacji Chrome? A może wdrożenie różni się od specyfikacji?
- Zgłoś błąd na https://new.crbug.com. Podaj jak najwięcej szczegółów i proste instrukcje odtworzenia. Glitch to doskonały sposób na szybkie i łatwe udostępnianie kopii.
Okaż wsparcie
Czy zamierzasz używać usługi showPicker()
? Twoja publiczna pomoc pomaga zespołowi Chrome priorytetowo traktować te funkcje i pokazuje innym dostawcom, jak ważne jest ich wsparcie.
Wyślij tweeta na adres @ChromiumDev i daj nam znać, gdzie i jak używasz tego narzędzia.
Przydatne linki
- Dokumentacja w MDN
- Wyjaśnienie COWG
- Specyfikacja WhatWG
- Ocena tagu
- Wersja demonstracyjna | Źródło demonstracyjne
- Błąd w Chromium
- Wpis na ChromeStatus.com
Podziękowania
Dziękujemy Joe Medley za przeczytanie tego artykułu. Zdjęcie kalendarza: Eric Rothermel, Unsplash.