تحميل واجهة برمجة تطبيقات JavaScript للخرائط

يوضّح لك هذا الدليل كيفية تحميل واجهة برمجة التطبيقات Maps JavaScript API. هناك ثلاث طرق لإجراء ذلك:

استخدام استيراد المكتبة الديناميكية

يوفر استيراد المكتبات الديناميكية إمكانية تحميل المكتبات أثناء التشغيل. يتيح لك هذا إمكانية طلب المكتبات المطلوبة عند الحاجة إليها، بدلاً من من كل مرة في وقت التحميل. ويحمي أيضًا صفحتك من تحميل واجهة برمجة التطبيقات JavaScript API في "خرائط Google" عدة مرات.

تحميل واجهة برمجة تطبيقات JavaScript للخرائط عن طريق إضافة التمهيد المضمّن إلى رمز تطبيقك كما هو موضّح في المقتطف التالي:

<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>

يمكنك أيضًا إضافة رمز برنامج الإقلاع مباشرةً إلى رمز JavaScript.

لتحميل المكتبات في وقت التشغيل، استخدِم عامل التشغيل await لطلب الرقم importLibrary(). من داخل الدالة async. يتيح لك تحديد متغيّرات للفئات المطلوبة تخطّي استخدام مسار مؤهَّل (مثل google.maps.Map)، كما هو موضّح في المثال التالي على الرمز البرمجي:

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();

يمكن للدالة أيضًا تحميل المكتبات بدون الإعلان عن المتغير للفئات المطلوبة، وهو أمر مفيد بشكل خاص إذا أضفت خريطة باستخدام العنصر gmp-map:

async function initMap() {
  google.maps.importLibrary("maps");
  google.maps.importLibrary("marker");
}

initMap();

وبدلاً من ذلك، يمكنك تحميل المكتبات مباشرةً بتنسيق HTML كما هو موضّح هنا:

<script>
google.maps.importLibrary("maps");
google.maps.importLibrary("marker");
</script>

تعرَّف على كيفية نقل البيانات إلى واجهة برمجة التطبيقات Dynamic Library Loading API.

المعلمات المطلوبة

المعلمات الاختيارية

  • v: الإصدار من واجهة برمجة التطبيقات Maps JavaScript API المطلوب تحميله

  • libraries: قائمة مفصولة بفواصل ببليوتكات إضافية لواجهة برمجة التطبيقات Maps JavaScript API المطلوب تحميلها يؤدي تحديد مجموعة ثابتة من المكتبات بشكل عام، ولكنها متاحة والمطورون الذين يريدون تحسين سلوك التخزين المؤقت على مواقعهم الإلكترونية

  • language: اللغة التي تريد استخدامها يؤثر هذا في أسماء عناصر التحكم وإشعارات حقوق الطبع والنشر واتجاهات القيادة والتصنيفات والتحكم فيها، والاستجابات لطلبات الخدمة. اطّلِع على قائمة اللغات المتاحة.

  • region: رمز المنطقة المطلوب استخدامه. يؤدي ذلك إلى تغيير سلوك الخريطة استنادًا إلى بلد معيّن أو منطقة معيّنة.

  • authReferrerPolicy: يمكن لعملاء "خرائط Google" المستندة إلى JavaScript ضبط قيود مُحيل HTTP في Cloud Console للحد من عناوين URL المسموح لها باستخدام مفاتيح واجهة برمجة التطبيقات المعينة. يمكن ضبط هذه القيود تلقائيًا للسماح باستخدام مفتاح واجهة برمجة التطبيقات في مسارات معيّنة فقط. إذا كان هناك أي عنوان URL في النطاق أو المصدر نفسه استخدام مفتاح واجهة برمجة التطبيقات، يمكنك ضبط authReferrerPolicy: "origin" لتقييد مقدار البيانات المرسلة عند السماح بالطلبات من واجهة برمجة تطبيقات JavaScript للخرائط. عند تحديد هذه المَعلمة وتفعيل قيود مُحيلي HTTP في Cloud Console، لن تتمكّن واجهة برمجة التطبيقات JavaScript لـ "خرائط Google" من التحميل إلا إذا كان هناك قيد مُحيل HTTP يطابق نطاق الموقع الإلكتروني الحالي بدون مسار محدّد.

  • mapIds: صفيف أرقام تعريف الخرائط يؤدي ذلك إلى تحميل الإعدادات الخاصة بمعرّفات الخرائط المحدّدة مسبقًا.

  • channel: راجِع تتبُّع الاستخدام لكل قناة.

  • solutionChannel: توفّر "منصة خرائط Google" العديد من أنواع نماذج الرموز البرمجية لمساعدتك في البدء والتشغيل بسرعة. لتتبُّع استخدام مزيد منعيّنات الرموز البرمجية المعقدة وتحسين جودة الحلّ، تُدرِج Google مَعلمة طلب البحث solutionChannel في طلبات بيانات واجهة برمجة التطبيقات في عيّنات الرموز البرمجية.

استخدام علامة تحميل النص البرمجي مباشرةً

يوضّح هذا القسم كيفية استخدام علامة تحميل النص البرمجي المباشر. نظرًا لأن التفاعل المباشر يحمّل البرنامج النصي المكتبات عند تحميل الخريطة، فيمكنه تبسيط الخرائط التي تم إنشاؤها باستخدام عنصر gmp-map عن طريق إلغاء الحاجة إلى طلب المكتبات بشكل صريح وقت التشغيل. بما أنّ علامة تحميل النص البرمجي المباشر تحمّل جميع المكتبات المطلوبة في آنٍ واحد عند تحميل النص البرمجي، قد يتأثّر الأداء في بعض التطبيقات. يجب تضمين علامة تحميل النص البرمجي المباشر مرة واحدة فقط لكل عملية تحميل صفحة.

إضافة علامة نص برمجي

لتحميل واجهة برمجة تطبيقات JavaScript للخرائط بشكل مضمّن في ملف HTML، أضف علامة script كما هو موضّح أدناه.

<script async
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&callback=initMap">
</script>

معلَمات عنوان URL لتحميل النص البرمجي المباشر

يتناول هذا القسم جميع المَعلمات التي يمكنك تحديدها في سلسلة طلب البحث لعنوان URL لتحميل النص البرمجي عند تحميل واجهة برمجة التطبيقات JavaScript لـ "خرائط Google". تكون بعض المَعلمات مطلوبة، في حين تكون بعضها الآخر اختيارية. كما هو قياسي في عناوين URL، ويتم فصل جميع المعلمات باستخدام حرف العطف (&).

يتضمن المثال التالي على عنوان URL عناصر نائبة لكل المعلمات الممكنة:

https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY
&loading=async
&callback=FUNCTION_NAME
&v=VERSION
&libraries="LIBRARIES"
&language="LANGUAGE"
&region="REGION"
&auth_referrer_policy="AUTH_REFERRER_POLICY"
&map_ids="MAP_IDS"
&channel="CHANNEL"
&solution_channel="SOLUTION_IDENTIFIER"

يحمّل عنوان URL في المثال التالي في العلامة script واجهة برمجة تطبيقات JavaScript للخرائط:

<script async
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&callback=initMap">
</script>

المَعلمات المطلوبة (مباشرة)

تكون المَعلمات التالية مطلوبة عند تحميل واجهة برمجة التطبيقات Maps JavaScript API.

  • key: مفتاح واجهة برمجة التطبيقات. تشير رسالة الأشكال البيانية لن يتم تحميل واجهة برمجة تطبيقات JavaScript للخرائط ما لم يتم استخدام مفتاح صالح لواجهة برمجة التطبيقات المحددة.

المَعلمات الاختيارية (مباشرة)

استخدِم هذه المَعلمات لطلب إصدار معيّن من واجهة برمجة التطبيقات Maps JavaScript API، أو لتحميل مكتبات إضافية، أو لتقسيم خريطتك حسب اللغة، أو لتحديد سياسة التحقّق من المُحيل في HTTP.

  • loading: استراتيجية تحميل الرمز التي يمكن أن تستخدمها واجهة برمجة تطبيقات JavaScript للخرائط. اضبط القيمة على async للإشارة إلى أنّه لم يتم تحميل واجهة برمجة تطبيقات JavaScript لخرائط Google بشكل متزامن وأنّه لم يتم بدء أي رمز JavaScript من خلال الحدث load للنص البرمجي. وننصح بشدة بضبطها على async كلّما أمكن ذلك لتحسين الأداء. (استخدِم المَعلمة callback بدلاً من ذلك لتنفيذ إجراءات عند توفّر واجهة برمجة تطبيقات JavaScript للخرائط). متوفّرة بدءًا من الإصدار 3.55

  • callback: اسم دالة عامة سيتمّ استدعاؤها بعد تحميل واجهة برمجة تطبيقات Maps JavaScript API بالكامل.

  • v: إصدار واجهة برمجة تطبيقات JavaScript للخرائط للاستخدام.

  • libraries: قائمة مفصولة بفواصل ببليوتكات إضافية لواجهة برمجة التطبيقات Maps JavaScript API المطلوب تحميلها

  • language: اللغة المطلوبة استخدامها. ويؤثر ذلك في أسماء عناصر التحكّم وإشعارات حقوق الطبع والنشر واتجاهات القيادة وتصنيفات عناصر التحكّم، بالإضافة إلى الردود على طلبات الخدمة. يمكنك الاطّلاع على قائمة اللغات المتاحة

  • region: المنطقة المستخدم الصحيح. وهذا يغير سلوك الخريطة بناءً على بلد معين أو الإقليم.

  • auth_referrer_policy: يمكن للعملاء ضبط مُحيل HTTP القيود في Cloud Console لتحديد عناوين URL المسموح لها باستخدام مفتاح واجهة برمجة تطبيقات معين. يمكن ضبط هذه القيود تلقائيًا للسماح باستخدام مفتاح واجهة برمجة التطبيقات في مسارات معيّنة فقط. إذا كان أي عنوان URL على النطاق أو المصدر نفسه قد يستخدم مفتاح واجهة برمجة التطبيقات، يمكنك ضبط auth_referrer_policy=origin للحد من كمية البيانات المُرسَلة عند تفويض الطلبات الواردة من Maps JavaScript API. تتوفر هذه الميزة بدءًا من الإصدار 3.46. عند تحديد هذه المَعلمة وتفعيل قيود مُحيل HTTP في Cloud Console، لن تتمكّن واجهة برمجة التطبيقات JavaScript لـ "خرائط Google" من التحميل إلا إذا كان هناك قيد مُحيل HTTP يتطابق مع نطاق الموقع الإلكتروني الحالي بدون مسار محدّد.

  • mapIds: قائمة بمعرّفات الخريطة مفصولة بفواصل. يؤدي ذلك إلى تحميل الإعدادات الخاصة بمعرّفات الخرائط المحدّدة مسبقًا.

  • channel: راجِع تتبُّع الاستخدام لكل قناة.

  • solution_channel: توفّر "منصة خرائط Google" عدة أنواع من نماذج الرموز. لمساعدتك على الإعداد والتشغيل بسرعة. لتتبع اعتماد نماذجنا الأكثر تعقيدًا عيّنات التعليمات البرمجية وتحسين جودة الحلول، تضمّ Google معلمة طلب البحث solution_channel في طلبات البيانات من واجهة برمجة التطبيقات في نموذج الرمز.

استخدام حزمة NPM js-api-loader

تتوفّر حزمة @googlemaps/js-api-loader لتحميلها من خلال مدير حِزم NPM. ثبِّت البرنامج باستخدام الأمر التالي:

npm install @googlemaps/js-api-loader

يمكن استيراد هذه الحزمة إلى التطبيق باستخدام:

import { Loader } from "@googlemaps/js-api-loader"

يعرِض أداة التحميل واجهة Promise وواجهة طلب إعادة الاتصال. يوضّح ما يلي استخدام طريقة Promise التلقائية 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,
  });
});

الاطّلاع على نموذج يعرض js-api-loader

يوضّح المثال التالي استخدام loader.importLibrary() لتحميل المكتبات:

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
});

نقل البيانات إلى واجهة برمجة التطبيقات لاستيراد المكتبة الديناميكية

يتناول هذا القسم الخطوات المطلوبة لنقل بيانات الدمج لاستخدامها. واجهة برمجة التطبيقات لاستيراد المكتبة الديناميكية.

خطوات نقل البيانات

أولاً، استبدِل علامة تحميل النص البرمجي المباشر بعلامة أداة تحميل التمهيد المضمّنة .

قبل

<script async
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&libraries=maps&callback=initMap">
</script>

بعد

<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>

بعد ذلك، عدِّل رمز تطبيقك:

  • غيِّر دالة initMap() لتكون غير متزامنة.
  • يُرجى الاتصال بـ importLibrary() لتحميل المكتبات التي تحتاج إليها والوصول إليها.

قبل

let map;

function initMap() {
  map = new google.maps.Map(document.getElementById("map"), {
    center: { lat: -34.397, lng: 150.644 },
    zoom: 8,
  });
}

window.initMap = initMap;

بعد

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();