Można przechwycić JSONP wyniki, które są zwracane przez funkcje google.maps.places.Autocomplete i używać ich zgodnie z potrzebami, tak aby ograniczyć od kraju i wyświetlić wyniki.
Zasadniczo przedefiniujesz metodę appendChild na elemencie head, a następnie monitorujesz elementy javascript, które kod autouzupełniania Google wstawia do DOM dla JSONP. Po dodaniu elementów javascript zastępujesz wywołania zwrotne JSONP zdefiniowane przez Google w celu uzyskania dostępu do surowych danych autouzupełniania.
Jest to bit hack, tu idzie (używam jQuery, ale nie jest to konieczne dla tego siekać do pracy):
//The head element, where the Google Autocomplete code will insert a tag
//for a javascript file.
var head = $('head')[0];
//The name of the method the Autocomplete code uses to insert the tag.
var method = 'appendChild';
//The method we will be overriding.
var originalMethod = head[method];
head[method] = function() {
if (arguments[0] && arguments[0].src && arguments[0].src.match(/GetPredictions/)) { //Check that the element is a javascript tag being inserted by Google.
var callbackMatchObject = (/callback=([^&]+)&|$/).exec(arguments[0].src); //Regex to extract the name of the callback method that the JSONP will call.
var searchTermMatchObject = (/\?1s([^&]+)&/).exec(arguments[0].src); //Regex to extract the search term that was entered by the user.
var searchTerm = unescape(searchTermMatchObject[1]);
if (callbackMatchObject && searchTermMatchObject) {
var names = callbackMatchObject[1].split('.'); //The JSONP callback method is in the form "abc.def" and each time has a different random name.
var originalCallback = names[0] && names[1] && window[names[0]] && window[names[0]][names[1]]; //Store the original callback method.
if (originalCallback) {
var newCallback = function() { //Define your own JSONP callback
if (arguments[0] && arguments[0][3]) {
var data = arguments[0][4]; //Your autocomplete results
//SUCCESS! - Limit results here and do something with them, such as displaying them in an autocomplete dropdown.
}
}
//Add copy all the attributes of the old callback function to the new callback function. This prevents the autocomplete functionality from throwing an error.
for (name in originalCallback) {
newCallback[name] = originalCallback[name];
}
window[names[0]][names[1]] = newCallback; //Override the JSONP callback
}
}
//Insert the element into the dom, regardless of whether it was being inserted by Google.
return originalMethod.apply(this, arguments);
};
To jest poprawna odpowiedź –
componentRestrictions: {country: 'gb'} // ograniczy do Wielkiej Brytanii tylko jak na pytanie – geedubb
powinny to być 'typy: ['miasta']', a nie 'typy: ['(miasta) "]" – tirdadc