Rzeczywiście link ty pisał http://www.birdtheme.org/useful/v3largemap.html działa bez klucza (jest tylko ostrzeżenie w konsoli). Wygląda na to, że Google umieszcza na białej liście niektóre nazwy domen, aby umożliwić korzystanie z interfejsu API bez klucza.
Próbowałem użyć v3 Google Maps API, aby wyświetlić płytek OpenStreetMap ale daje „błąd API Google Maps: MissingKeyMapError” na moim localhost pracującej na tej stronie bez klucza API: http://harrywood.co.uk/maps/examples/google-maps/apiv3.html
Na większości strony internetowe, które nie używają klucza API, wystąpił błąd, który uniemożliwia korzystanie z Google Maps, ale można ominąć tę cenzurę.
rozwiązanie, jeśli nie jesteś właścicielem serwera przy użyciu Google Maps API bez klucza:
blokować wysyłanie żądania HTTP błędu z dodatku jak AdBlockPlus i rządów http://maps.googleapis.com/maps/api/js/AuthenticationService.Authenticate?*
to daje dostęp do kafelków API Map Google, znaczników, informacji Okienko popup ... Ale jeśli chcesz korzystać z interfejsu API geokodującego, musisz także remove your HTTP referer header
dodać do przeglądarki dodatek "Modyfikuj nagłówki".
Rozwiązanie dodać na swojej stronie internetowej, więc każdy odwiedzający może uzyskać dostęp do Google Maps API bez klucza:
Poniżej JavaScript włamać stworzyłem w użyciu Google Maps API V3 bez klucza i obejść się komunikat o błędzie.
// hack Google Maps to bypass API v3 key (needed since 22 June 2016 http://googlegeodevelopers.blogspot.com.es/2016/06/building-for-scale-updates-to-google.html)
var target = document.head;
var observer = new MutationObserver(function(mutations) {
for (var i = 0; mutations[i]; ++i) { // notify when script to hack is added in HTML head
if (mutations[i].addedNodes[0].nodeName == "SCRIPT" && mutations[i].addedNodes[0].src.match(/\/AuthenticationService.Authenticate?/g)) {
var str = mutations[i].addedNodes[0].src.match(/[?&]callback=.*[&$]/g);
if (str) {
if (str[0][str[0].length - 1] == '&') {
str = str[0].substring(10, str[0].length - 1);
} else {
str = str[0].substring(10);
}
var split = str.split(".");
var object = split[0];
var method = split[1];
window[object][method] = null; // remove censorship message function _xdc_._jmzdv6 (AJAX callback name "_jmzdv6" differs depending on URL)
//window[object] = {}; // when we removed the complete object _xdc_, Google Maps tiles did not load when we moved the map with the mouse (no problem with OpenStreetMap)
}
observer.disconnect();
}
}
});
var config = { attributes: true, childList: true, characterData: true }
observer.observe(target, config);
To da Ci dostęp do Google Maps API płytek, markery, infoWindow popup ... dla API geokodowanie, trzeba także usunąć HTTP_REFERER z HTML meta tag poniżej.
<meta name="referrer" content="no-referrer"> <!-- don't send HTTP referer for privacy purpose and to use Google Maps Geocoding API without key -->
Dziękuję, to działa dla mnie :) – user3719857
Tak, działa, ale pierwsze żądanie API jest bardzo powolne (5 do 10 sekund), z powodu opóźnionego pobrania pliku Google QuotaService.RecordEvent, a następnie wszelkich innych żądanie działa dobrze ... Jakieś wyjaśnienie? –
@DrFred Widziałem, że uzyskanie pierwszej odpowiedzi z interfejsu API geokodującego zajmuje nieco więcej czasu. Problem opóźnień z pewnością bierze się z serwerów Google próbujących uwierzytelnić użytkownika za pomocą klucza API, ale cieszę się, że mam działające rozwiązanie i mam nadzieję, że obejście to zadziała tak długo, jak to możliwe. Przed tym hackerem nie mogłem nawet przetestować Google Maps API z localhost bez klucza API. Gdybym pracował nad nowym projektem, z pewnością skorzystałbym z OpenStreetMap dla darmowych map i pozbyć się tych ograniczeń. – baptx