Я думал, что я бы поставил это здесь, поскольку он, похоже, является популярной точкой посадки для тех, кто начинает использовать API Карт Google. Несколько маркеров, отображаемых на стороне клиента, вероятно, являются падением многих характеристик приложений сопоставления. Трудно тестировать, исправлять и в некоторых случаях даже устанавливать проблему (из-за различий в реализации браузера, оборудования, доступного клиенту, мобильных устройств, список продолжается).
Самый простой способ начать эту проблему - использовать решение кластеризации маркеров. Основная идея состоит в том, чтобы группировать географически похожие местоположения в группу с количеством отображаемых точек. По мере того, как пользователь приближается к карте, эти группы расширяются, чтобы показывать отдельные маркеры внизу.
Возможно, проще всего реализовать библиотеку markerclusterer . Основная реализация будет следующей (после импорта библиотеки):
Маркеры вместо добавления непосредственно к карте добавляются в массив. Затем этот массив передается в библиотеку, которая обрабатывает сложные вычисления для вас и прикрепляется к карте.
Не только эти реализации значительно увеличивают производительность на стороне клиента, но также во многих случаях приводят к более простому и менее загроможденному пользовательскому интерфейсу и более простому перевариванию данных в больших масштабах.
Другие версии доступны в Google.
Надеюсь, что это поможет некоторым из тех, кто новее к нюансам картографии.
ОБНОВЛЕНИЕ: по версии 41 Google Chrome initMouseEvent
, похоже, изменилось.
это можно сделать, смоделировав ctrl
+ click
(или любые другие комбинации клавиш / событий, открывающие вкладку фона) на динамически сгенерированный элемент a
с его атрибутом href
, установленным на url
В действии: скрипт
function openNewBackgroundTab(){
var a = document.createElement("a");
a.href = "http://www.google.com/";
var evt = document.createEvent("MouseEvents");
//the tenth parameter of initMouseEvent sets ctrl key
evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0,
true, false, false, false, 0, null);
a.dispatchEvent(evt);
}
проверен только на хроме
Насколько я помню, это контролируется настройками браузера. Другими словами: пользователь может выбрать, хотите ли они открывать новую вкладку в фоновом или переднем плане. Также они могут выбрать, должно ли новое всплывающее окно открываться на новой вкладке или просто ... всплывать.
Например, в настройках firefox:
[/g0]
Обратите внимание на последнюю опцию.
Вот полный пример для навигации по допустимому URL-адресу на новой вкладке с фокусировкой.
HTML:
<div class="panel">
<p>
Enter Url:
<input type="text" id="txturl" name="txturl" size="30" class="weburl" />
<input type="button" id="btnopen" value="Open Url in New Tab" onclick="openURL();"/>
</p>
</div>
CSS:
.panel{
font-size:14px;
}
.panel input{
border:1px solid #333;
}
JAVASCRIPT:
function isValidURL(url) {
var RegExp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
if (RegExp.test(url)) {
return true;
} else {
return false;
}
}
function openURL() {
var url = document.getElementById("txturl").value.trim();
if (isValidURL(url)) {
var myWindow = window.open(url, '_blank');
myWindow.focus();
document.getElementById("txturl").value = '';
} else {
alert("Please enter valid URL..!");
return false;
}
}
Я также создал bin с решением на http://codebins.com/codes/home/4ldqpbw
Я сделал именно то, что вы ищете очень простым способом. Он отлично работает в Google Chrome и Opera и почти идеален в Firefox и Safari. Не тестировалось в IE.
function newTab(url)
{
var tab=window.open("");
tab.document.write("<!DOCTYPE html><html>"+document.getElementsByTagName("html")[0].innerHTML+"</html>");
tab.document.close();
window.location.href=url;
}
Fiddle: http://jsfiddle.net/tFCnA/show/
Объяснения: Скажем, есть окна A1 и B1 и сайты A2 и B2. Вместо того, чтобы открывать B2 в B1, а затем возвращаться к A1, я открываю B2 в A1 и снова открываю A2 в B1. (Еще одна вещь, которая заставляет его работать, заключается в том, что я не заставляю пользователя повторно загружать A2, см. Строку 4)
Единственное, что вы не можете не похоже, что новая вкладка открывается перед главной страницей.
Попробуйте это. Он отлично работает с хромом, он также работает от расширения хрома. Все это не помогло мне.
chrome.tabs.create({ url: "http://www.google.com/", selected: false });
THX для этого вопроса! Работает хорошо для меня во всех популярных браузерах:
function openNewBackgroundTab(){
var a = document.createElement("a");
a.href = window.location.pathname;
var evt = document.createEvent("MouseEvents");
//the tenth parameter of initMouseEvent sets ctrl key
evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0,
true, false, false, false, 0, null);
a.dispatchEvent(evt);
}
var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
if(!is_chrome)
{
var url = window.location.pathname;
var win = window.open(url, '_blank');
} else {
openNewBackgroundTab();
}