не работает Dynamic Library Import для Maps JavaScript API в App script

Пытаюсь перейти на Dynamic Library Import API (с устаревшего тега script). Пример согласно документации сделал в гугл-таблице на Apps Script В результате ожидается получить гугл-карту в браузере, но получаю ошибку в консоли

userCodeAppPanel:2 Uncaught SyntaxError: Unexpected end of input userCodeAppPanel:6 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'importLibrary') at initMap (userCodeAppPanel:6:39) at userCodeAppPanel:15:1

Но тот же самый код в jsfiddle отрабатывается без ошибок (результат в виде карты отображается).

Предполагаю что чего-то не хватает именно в Apps Script. Прошу помочь понять причину и запустить код на Dynamic Library Import

Ниже привожу код с Apps script:

    <!doctype html>
<html>
  <head>
    <title>Simple Map</title>
    <script>
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: 40.72476, lng: -74.04843 },
        zoom: 8,
    });

}

initMap();
</script>
  </head>
  <body>
    <div id="map"></div>
  
   <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: "AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg", v: "weekly"});</script>

<style>
#map {
  height: 100%;
}

html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
  background-color: grey;
}
</style>
  </body>
</html>

Ответы (1 шт):

Автор решения: Volodymyr

Вопрос решен. Решение от Tanaike: Шаги решения:

  1. исправление URL: вариант1. https:\/\/maps.${c}apis.com/maps/api/js? вариант2. "https://maps.${c}apis.com/maps/api/js?"
  2. изменение структуры кода от Tanaike (рабочий код привожу ниже)
  3. добавление разрешений АПИ для ключа гугл

Рабочий код от Tanaike:

    <!doctype html>
<html>

<head>
  <title>Simple Map</title>
  <style>
    #map {
      height: 100%;
    }

    html,
    body {
      height: 100%;
      margin: 0;
      padding: 0;
      background-color: grey;
    }
  </style>

  <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: "AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg", v: "weekly" });
  </script>

  <script>
  let map;
  console.log('let map');

  async function initMap() {
    console.log('start 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: 50.397, lng: -70.644 },
      zoom: 4
    });
  }

  initMap();
  </script>
</head>

<body>
  <div id="map"></div>
</body>

</html>
→ Ссылка