如何以编程方式关闭 HERE 地图上下文菜单?

How can I dismiss a HERE Maps context menu programmatically?

我有一个 HERE Maps 地图显示在一个简单的网页上,带有多选下拉菜单和几个按钮。我正在使用 contextmenu 事件在右键单击时显示上下文菜单,如下所示:

var map = new H.Map(
    document.getElementById('mapContainer'),
    maptypes.raster.normal.map,
    {
        zoom: 12,
        center: { lat: -33.81, lng: 150.78 },
        pixelRatio: window.devicePixelRatio || 1,
        engineType: H.map.render.RenderEngine.EngineType.P2D
    }
);

...

// an H.map.Polygon object we prepared earlier
polygonObject.addEventListener("contextmenu", handleContextMenu)

...

function handleContextMenu(evt) {
    // Don't do anything if the map itself is right-clicked/long-pressed
    if (evt.target === map) {
        return;
    }

    if (evt.target instanceof H.map.Polygon) {
        // Polygon-specific context menu items
        evt.items.push(new H.util.ContextItem({ label: "ABC123" }));
        evt.items.push(H.util.ContextItem.SEPARATOR);
        evt.items.push(new H.util.ContextItem({ label: "Do something", callback: function () { doSomething(evt) } }));
    }
}

这很好用,当右键单击多边形对象时显示上下文菜单,如果点击地图上的其他地方则自动关闭。但是,如果用户单击地图上外部页面上的另一个元素或与之交互,则上下文菜单不会关闭。

我找不到任何关于如何实现此行为的文档,并且 example that HERE Maps uses 也不会在单击地图外的某处时关闭上下文菜单。如果与另一个页面元素交互,是否有任何方法以编程方式或自动关闭地图上的上下文菜单?

有点老套,但您可以通过在页面中找到带有 h_context_menu class 的 div 手动从 DOM 中删除上下文菜单,并将其删除。这可能会对 UI class 产生一些意想不到的副作用,但从我的简短测试来看似乎工作正常。

使用JQuery:

$("div.h_context_menu").remove()

使用 ES6:

document.querySelector("div.h_context_menu").remove()

使用原版 JavaScript(与 Internet Explorer 兼容):

var el = document.querySelector("div.h_context_menu");
el.parentNode.removeChild(el);