Leafletライブラリ を使用して、別のスクリプトによってすでに初期化されているマップ上のいくつかのものを変更しようとしています。この他のスクリプトは、マップオブジェクトをグローバル変数、またはスクリプトでアクセスできる他の場所に格納しませんでした。そのため、現在私のページには地図がありますが、地図オブジェクトがありません。
私がやりたいのは、すでに初期化されているマップのオブジェクトを取得して、それに変更を加えることです。たとえば、関数L.getMap('myID')
が存在する場合、そのようなメソッドを使用して、コンテナmyID
にリンクされたマップオブジェクトを取得したいと思います。
TL; DR:コンテナのIDを使用して、すでに初期化されたリーフレットマップのマップオブジェクトを取得する方法はありますか?
Mediawiki拡張機能によって作成されたグローバル配列からマップにアクセスできます。
Es:ページの最初のマップにアクセスするため
window.maps.leafletList[0].map.getCenter()
記録として、マップが初期化される前(つまり、「他のスクリプト」が実行される前)にJSコードを挿入/実行する可能性がある場合は、作成された各マップへの参照を保持するようにリーフレットを非常に簡単にカスタマイズできます。
例えば。 L.Map
クラスで addInitHook
コンストラクタフック を使用します。
// Before map is being initialized.
var mapsPlaceholder = [];
L.Map.addInitHook(function () {
mapsPlaceholder.Push(this); // Use whatever global scope variable you like.
});
// "Other script", can be in its own separate <script> and JS file.
L.map('mapId'); // The map object is pushed into `mapsPlaceholder` array.
// Then retrieve the map object to further manipulate the map.
var map = mapsPlaceholder.pop();