Ответ Mark's является способом пойти, в конце концов, вот почему,/proc файловая система там. Для чего-то немного больше copy/pasteable:
>>> import os.path
>>> os.path.exists("/proc/0")
False
>>> os.path.exists("/proc/12")
True
После безумного поиска в Google я нашел решение и поделюсь им здесь, чтобы другие, надеюсь, не пережили того горя, через которое я прошел.
Я создал и включил в свой bing map с использованием чистого javascript, без решений sdk или iframe. В моем коде я генерирую javascript, чтобы добавить все контакты, которые хочу на карту, и вставляю его с помощью метки asp.net.
Если вы вызываете метод setCenter () на своей карте Bing, он должен мгновенно установите карту, сюрприз-сюрприз, на указанные вами координаты. И так ... в большинстве случаев. Однако иногда он решает перемещаться между точками. Если вы сделаете SetCenter, а затем ShowInfoBox, он будет отлично работать, если только он не решит панорамировать.
Решение? Будучи хорошими программистами, мы углубляемся в sdk, и он показывает, что есть события, к которым мы можем подключиться, чтобы с ними справиться. Существует событие onendpan, которое запускается после завершения панорамирования. Существует также событие onchangeview, которое срабатывает при скачке карты.
Итак, мы подключаемся к этим событиям и пытаемся отобразить информационное окно для нашей формы кнопки ... но ничего не происходит. Почему бы и нет?
Вы должны дать ему несколько миллисекунд, чтобы отдышаться, по неизвестным причинам, когда вызывается событие. Кажется, нормально использовать setTimeout с 10 миллисекундами. После этого ваше окно будет выглядеть великолепно.
Следующая проблема заключается в том, что вы хотите, чтобы он отображался только тогда, когда он перемещается через все, что вы использовали, чтобы заставить его переключаться между вашими кнопками (в моем случае, таблица с методами onclick). Я создаю / уничтожаю обработчики событий на лету, хотя есть и другие варианты, такие как использование глобальной переменной для отслеживания, выполняет ли пользователь панорамирование или панорамирует ли система в ответ на щелчок.
Наконец, у вас есть одна ошибка, которая возникает из-за этого. Если вы щелкнете по месту в своем списке, и он переместится в это место, информационное окно будет отображаться нормально. Если пользователь отклоняет его, а затем снова щелкает по элементу списка, карта не перемещается, и, следовательно, никакие события не запускаются.
Мое решение этой проблемы состоит в том, чтобы определить, перемещалась карта или нет, путем записи ее длинных / lat и с помощью другого метода setTimeout, определяющего, изменились ли они через 100 мс. Если они этого не сделали, отобразите информационное окно.
Есть и другие вещи, которые вам нужно отслеживать, поскольку я не могу видеть, как передавать параметры обработчикам событий, поэтому я использую для этого глобальные переменные javascript - вы должны знать какую форму кнопки вы показываете, а также отслеживайте предыдущие координаты карты, прежде чем проверять, изменились ли они.
Мне потребовалось время, чтобы собрать все это воедино, но вроде работает. Вот мой код, некоторые разделы удалены:
// An array of our pins to allow panning to them
var myPushPins = [];
// Used by the eventhandler
var eventPinIndex;
var oldMapCenter;
// Zoom in and center on a pin, then show its information box
function ShowPushPin(pinIndex) {
eventPinIndex = pinIndex;
oldMapCenter = map.GetCenter();
map.AttachEvent("onendpan", EndPanHandler);
map.AttachEvent("onchangeview", ChangeViewHandler);
setTimeout("DetectNoMapChange();", 200);
map.SetZoomLevel(9);
map.SetCenter(myPushPins[pinIndex].GetPoints()[0]);
}
function EndPanHandler(e) {
map.DetachEvent("onendpan", EndPanHandler);
setTimeout("map.ShowInfoBox(myPushPins[eventPinIndex]);", 10);
}
function ChangeViewHandler(e) {
map.DetachEvent("onchangeview", ChangeViewHandler);
setTimeout("map.ShowInfoBox(myPushPins[eventPinIndex]);", 10);
}
function DetectNoMapChange(centerofmap) {
if (map.GetCenter().Latitude == oldMapCenter.Latitude && map.GetCenter().Longitude == oldMapCenter.Longitude) {
map.ShowInfoBox(myPushPins[eventPinIndex]);
}
}