На самом деле официальный способ сделать это следующий:
(Примечание: некоторые переменные не были объявлены в этих фрагментах: longt, lat, map)
http://dev.openlayers.org/examples/light-basic.html
//Step 1 - create the vector layer
var vectorLayer = new OpenLayers.Layer.Vector("ExampleLayer",{
eventListeners:{
'featureselected':function(evt){
var feature = evt.feature;
var popup = new OpenLayers.Popup.FramedCloud("popup",
OpenLayers.LonLat.fromString(feature.geometry.toShortString()),
null,
feature.attributes.message+"<br>"+feature.attributes.location,
null,
true,
null
);
popup.autoSize = true;
popup.maxSize = new OpenLayers.Size(400,800);
popup.fixedRelativePosition = true;
feature.popup = popup;
map.addPopup(popup);
},
'featureunselected':function(evt){
var feature = evt.feature;
map.removePopup(feature.popup);
feature.popup.destroy();
feature.popup = null;
}
}
});
//Step 2 - add feature to layer
var p = new OpenLayers.Geometry.Point(longt, lat);
var feature = new OpenLayers.Feature.Vector(
p.transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject()),
{message:'foo', location:'bar'},
{externalGraphic: '../img/marker.png', graphicHeight: 21, graphicWidth: 16}
);
vectorLayer.addFeatures(feature);
//Step 3 - create the selectFeature control
var selector = new OpenLayers.Control.SelectFeature(vectorLayer,{
hover:true,
autoActivate:true
});
//Step 4 - add the layer and control to the map
map.addControl(selector);
map.addLayer(vectorLayer);