Panduan ini menunjukkan cara memuat Maps JavaScript API. Ada tiga cara untuk melakukannya:
- Menggunakan impor library dinamis
- Menggunakan tag pemuatan skrip langsung
- Menggunakan paket js-api-loader NPM
Menggunakan Dynamic Library Import
Impor library dinamis menyediakan kemampuan untuk memuat library saat runtime. Hal ini memungkinkan Anda meminta library yang diperlukan pada saat Anda membutuhkannya, bukan secara sekaligus pada waktu pemuatan. Hal ini juga melindungi halaman Anda agar tidak memuat Maps JavaScript API beberapa kali.
Muat Maps JavaScript API dengan menambahkan loader bootstrap inline ke kode aplikasi Anda, seperti yang ditunjukkan dalam cuplikan berikut:
<script> (g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({ key: "YOUR_API_KEY", v: "weekly", // Use the 'v' parameter to indicate the version to use (weekly, beta, alpha, etc.). // Add other bootstrap parameters as needed, using camel case. }); </script>
Anda juga dapat menambahkan kode loader bootstrap langsung ke kode JavaScript Anda.
Untuk memuat library saat runtime, gunakan operator await
untuk memanggil importLibrary()
dari dalam fungsi async
. Dengan mendeklarasikan variabel untuk class yang diperlukan, Anda dapat
mengabaikan penggunaan jalur yang memenuhi syarat (misalnya, google.maps.Map
), seperti yang ditunjukkan dalam
contoh kode berikut:
TypeScript
let map: google.maps.Map; async function initMap(): Promise<void> { const { Map } = await google.maps.importLibrary("maps") as google.maps.MapsLibrary; map = new Map(document.getElementById("map") as HTMLElement, { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); } initMap();
JavaScript
let map; async function initMap() { const { Map } = await google.maps.importLibrary("maps"); map = new Map(document.getElementById("map"), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); } initMap();
Fungsi Anda juga dapat memuat library tanpa mendeklarasikan variabel
untuk class yang diperlukan, yang sangat berguna jika Anda menambahkan peta menggunakan elemen gmp-map
:
async function initMap() { google.maps.importLibrary("maps"); google.maps.importLibrary("marker"); } initMap();
Atau, Anda dapat memuat library secara langsung di HTML seperti yang ditunjukkan di sini:
<script> google.maps.importLibrary("maps"); google.maps.importLibrary("marker"); </script>
Pelajari cara bermigrasi ke Dynamic Library Loading API.
Parameter wajib
key
: Kunci API Anda. Maps JavaScript API tidak akan dimuat kecuali jika kunci API yang valid ditentukan.
Parameter opsional
v
: Versi Maps JavaScript API yang akan dimuat.libraries
: Daftar yang dipisahkan koma untuk library Maps JavaScript API tambahan yang akan dimuat. Menentukan serangkaian library yang tetap umumnya tidak direkomendasikan, tetapi tersedia bagi developer yang ingin secara mendetail menyesuaikan perilaku caching di situs mereka.language
: Bahasa yang akan digunakan. Parameter ini memengaruhi nama kontrol, pemberitahuan hak cipta, rute mobil, dan label kontrol, serta respons atas permintaan layanan. Lihat daftar bahasa yang didukung.region
: Kode wilayah yang akan digunakan. Parameter ini akan mengubah perilaku peta berdasarkan negara atau wilayah yang tertentu.authReferrerPolicy
: Pelanggan Maps JS dapat mengonfigurasi Pembatasan Perujuk HTTP di Konsol Cloud untuk membatasi URL mana yang diizinkan untuk menggunakan kunci API tertentu. Secara default, pembatasan ini dapat dikonfigurasi untuk mengizinkan jalur tertentu saja yang dapat menggunakan Kunci API. Jika URL di domain atau origin yang sama dapat menggunakan Kunci API tersebut, Anda dapat menetapkanauthReferrerPolicy: "origin"
untuk membatasi jumlah data yang dikirim saat mengizinkan permintaan dari Maps JavaScript API. Jika parameter ini ditentukan dan Pembatasan Perujuk HTTP diaktifkan di Konsol Cloud, Maps JavaScript API hanya dapat dimuat jika ada Pembatasan Perujuk HTTP yang cocok dengan domain situs saat ini tanpa jalur yang ditentukan.mapIds
: Array ID peta. Menyebabkan konfigurasi untuk ID peta yang ditentukan dimuat sebelumnya.channel
: Lihat Pelacakan penggunaan per saluran.solutionChannel
: Google Maps Platform menyediakan banyak jenis kode contoh untuk membantu Anda membuat peta dengan cepat. Untuk melacak penerapan contoh kode yang lebih kompleks dan meningkatkan kualitas solusi, Google menyertakan parameter kuerisolutionChannel
pada panggilan API dalam kode contoh kami.
Menggunakan tag pemuatan skrip langsung
Bagian ini menunjukkan cara menggunakan tag pemuatan skrip langsung. Karena skrip langsung
memuat library saat peta dimuat, skrip ini dapat menyederhanakan peta yang dibuat menggunakan elemen gmp-map
dengan menghapus kebutuhan untuk meminta library secara eksplisit saat runtime. Karena tag pemuatan skrip langsung memuat semua library yang diminta sekaligus saat skrip dimuat, performa dapat terpengaruh untuk beberapa aplikasi. Hanya sertakan tag pemuatan skrip langsung sekali per pemuatan halaman.
Menambahkan tag skrip
Untuk memuat Maps JavaScript API secara inline dalam file HTML, tambahkan tag script
seperti yang ditunjukkan di bawah.
<script async
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&callback=initMap">
</script>
Parameter URL pemuatan skrip langsung
Bagian ini membahas semua parameter yang dapat Anda tentukan dalam string kueri
URL pemuatan skrip saat memuat Maps JavaScript API.
Beberapa parameter tertentu wajib ditentukan sementara yang lainnya bersifat opsional. Sesuai dengan standar dalam
URL, semua parameter dipisah menggunakan karakter ampersand (&
).
Contoh URL berikut memiliki placeholder untuk semua kemungkinan parameter:
https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY
&loading=async
&callback=FUNCTION_NAME
&v=VERSION
&libraries="LIBRARIES"
&language="LANGUAGE"
®ion="REGION"
&auth_referrer_policy="AUTH_REFERRER_POLICY"
&map_ids="MAP_IDS"
&channel="CHANNEL"
&solution_channel="SOLUTION_IDENTIFIER"
URL dalam contoh tag script
berikut memuat Maps JavaScript API:
<script async
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&callback=initMap">
</script>
Parameter wajib (langsung)
Parameter berikut wajib ditentukan saat memuat Maps JavaScript API.
key
: Kunci API Anda. Maps JavaScript API tidak akan dimuat kecuali jika kunci API yang valid ditentukan.
Parameter opsional (langsung)
Gunakan parameter berikut untuk meminta Maps JavaScript API versi tertentu, memuat library tambahan, melokalkan peta Anda, atau menentukan kebijakan pemeriksaan perujuk HTTP
loading
: Strategi pemuatan kode yang dapat digunakan Maps JavaScript API. Tetapkan keasync
untuk menunjukkan bahwa Maps JavaScript API belum dimuat secara sinkron dan tidak ada kode JavaScript yang dipicu oleh peristiwaload
skrip. Sebaiknya tetapkan setelan ini keasync
jika memungkinkan, untuk meningkatkan performa. (Gunakan parametercallback
untuk melakukan tindakan saat Maps JavaScript API tersedia.) Tersedia mulai versi 3.55.callback
: Nama fungsi global yang akan dipanggil setelah Maps JavaScript API dimuat sepenuhnya.v
: Versi Maps JavaScript API yang akan digunakan.libraries
: Daftar yang dipisahkan koma untuk library Maps JavaScript API tambahan yang akan dimuat.language
: Bahasa yang akan digunakan. Hal ini memengaruhi nama kontrol, pemberitahuan hak cipta, rute mobil, dan label kontrol, serta respons atas permintaan layanan. Lihat daftar bahasa yang didukung.region
: Kode wilayah yang akan digunakan. Parameter ini akan mengubah perilaku peta berdasarkan negara atau wilayah yang tertentu.auth_referrer_policy
: Pelanggan dapat mengonfigurasi Pembatasan Perujuk HTTP di Konsol Cloud untuk membatasi URL mana yang diizinkan untuk menggunakan Kunci API tertentu. Secara default, pembatasan ini dapat dikonfigurasi untuk mengizinkan jalur tertentu saja yang dapat menggunakan Kunci API. Jika URL di domain atau origin yang sama dapat menggunakan Kunci API tersebut, Anda dapat menetapkanauth_referrer_policy=origin
untuk membatasi jumlah data yang dikirim saat mengizinkan permintaan dari Maps JavaScript API. Fitur ini tersedia mulai versi 3.46. Jika parameter ini ditentukan dan Pembatasan Perujuk HTTP diaktifkan di Konsol Cloud, Maps JavaScript API hanya dapat dimuat jika ada Pembatasan Perujuk HTTP yang cocok dengan domain situs saat ini tanpa jalur yang ditentukan.mapIds
: Daftar ID peta yang dipisahkan koma. Menyebabkan konfigurasi untuk ID peta yang ditentukan dimuat sebelumnya.channel
: Lihat Pelacakan penggunaan per saluran.solution_channel
: Google Maps Platform menyediakan banyak jenis kode contoh untuk membantu Anda membuat peta dengan cepat. Untuk melacak penerapan contoh kode yang lebih kompleks dan meningkatkan kualitas solusi, Google menyertakan parameter kuerisolution_channel
pada panggilan API dalam kode contoh kami.
Menggunakan paket js-api-loader NPM
Paket @googlemaps/js-api-loader tersedia untuk dimuat melalui pengelola paket NPM. Instal paket ini menggunakan perintah berikut:
npm install @googlemaps/js-api-loader
Paket ini dapat diimpor ke dalam aplikasi dengan:
import { Loader } from "@googlemaps/js-api-loader"
Loader mengekspos antarmuka callback dan Promise. Berikut ini adalah contoh penggunaan metode Promise default load()
.
TypeScript
const loader = new Loader({ apiKey: "YOUR_API_KEY", version: "weekly", ...additionalOptions, }); loader.load().then(async () => { const { Map } = await google.maps.importLibrary("maps") as google.maps.MapsLibrary; map = new Map(document.getElementById("map") as HTMLElement, { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); });
JavaScript
const loader = new Loader({ apiKey: "YOUR_API_KEY", version: "weekly", ...additionalOptions, }); loader.load().then(async () => { const { Map } = await google.maps.importLibrary("maps"); map = new Map(document.getElementById("map"), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); });
Lihat contoh yang menampilkan js-api-loader.
Contoh berikut menunjukkan penggunaan loader.importLibrary()
untuk memuat library:
const loader = new Loader({
apiKey: "YOUR_API_KEY",
version: "weekly",
...additionalOptions,
});
loader
.importLibrary('maps')
.then(({Map}) => {
new Map(document.getElementById("map"), mapOptions);
})
.catch((e) => {
// do something
});
Bermigrasi ke Dynamic Library Import API
Bagian ini membahas langkah-langkah yang diperlukan untuk memigrasikan integrasi Anda agar dapat menggunakan Dynamic Library Import API.
Langkah migrasi
Pertama, ganti tag pemuatan skrip langsung dengan tag loader bootstrap inline.
Sebelum
<script async
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&libraries=maps&callback=initMap">
</script>
Setelah
<script> (g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({ key: "YOUR_API_KEY", v: "weekly", // Use the 'v' parameter to indicate the version to use (weekly, beta, alpha, etc.). // Add other bootstrap parameters as needed, using camel case. }); </script>
Selanjutnya, perbarui kode aplikasi Anda:
- Ubah fungsi
initMap()
menjadi asinkron. - Panggil
importLibrary()
untuk memuat dan mengakses library yang Anda perlukan.
Sebelum
let map; function initMap() { map = new google.maps.Map(document.getElementById("map"), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); } window.initMap = initMap;
Setelah
let map; // initMap is now async async function initMap() { // Request libraries when needed, not in the script tag. const { Map } = await google.maps.importLibrary("maps"); // Short namespaces can be used. map = new Map(document.getElementById("map"), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); } initMap();