CEFSharp изменяет или усекает адресные данные геокодирования из API Google Maps v3

Для воспроизведения загрузите CefSharp отсюда: https://github.com/cefsharp/CefSharp.

И запустите CefSharp.WinForms.Example

Теперь запустите мою скрипку в своем браузере и браузере CefSharp: http://jsfiddle.net/bjmL9/

Я добавил оповещение, отображающее полные данные адреса при клике (номер_улицы, маршрут, район, населенный пункт, уровень_административной_области_2, уровень_административной_области_1, страна, почтовый_код).

Сравните данные, отображаемые в вашем браузере, с данными в браузере CefSharp.

Проблема: в моем браузере населенный пункт отображается как "Culiacán Rosales", но в браузере Cef он усекается до "Culiacán". Страна тоже ведет себя странно: Cef показывает «Мексика» вместо «Мексика» (без ударения).

Я на грани того, чтобы выйти из cef, потому что я не могу найти Google для этой проблемы и понятия не имею, как это исправить...

Это код скрипки, поскольку он не будет длиться вечно:

<!DOCTYPE html>
<html>
  <head>
    <title>Google Map</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <style>
      html, body, #map-canvas {
        height: 100%;
        margin: 0px;
        padding: 0px
      }
    </style>
    <link href="MapStyle.css" rel="stylesheet" type="text/css" media="all"/>
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places"></script>
    <script>
      var map;
      var geocoder;

      function initialize() {
          var placeMarkers = [];
          geocoder = new google.maps.Geocoder();
          var aquamiller = new google.maps.LatLng(
              24.832956, 
              -107.389775);

          var mapOptions = {
              zoom: 16,
              center: aquamiller,
          };

          map = new google.maps.Map(
              document.getElementById('map-canvas'), 
              mapOptions);

          createSearchBar(map, placeMarkers);

          google.maps.event.addListener(
              map,
              'click', 
              function(e) {
                  getAddress(e.latLng, function(address) {
                      alert(
                        address.street_number + ', ' +
                        address.route + ', ' +
                        address.neighborhood + ', ' +
                        address.locality + ', ' +
                        address.administrative_area_level_2 + ', ' +
                        address.administrative_area_level_1 + ', ' +
                        address.country + ', ' +
                        address.postal_code);
                  });
              });
      }

      function getAddress(latLng, callBack)
      {
          geocoder.geocode({'latLng': latLng}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
              if (results[0]) {
                var address = {};
                var components = results[0].address_components;
                for (var i = 0 ; i< components.length ; i++) {
                  address[components[i].types[0]] = components[i].long_name;
                }
                callBack(address);
              }
              else {
                alert('No results found');
              }
            }
            else {
              alert('Geocoder failed due to: ' + status);
            }
          });
      }

      function createSearchBar(map, markers)
      {
          var input = /** @type {HTMLInputElement} */(document.getElementById('pac-input'));
          map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);

          var searchBox = new google.maps.places.SearchBox(/** @type {HTMLInputElement} */(input));

          google.maps.event.addListener(searchBox, 'places_changed', function() {
            var places = searchBox.getPlaces();
            console.log(places);
            for (var i = 0, marker; marker = markers[i]; i++) {
              marker.setMap(null);
            }

            markers = [];
            var bounds = new google.maps.LatLngBounds();
            for (var i = 0, place; place = places[i]; i++) {
              var image = {
                url: place.icon,
                size: new google.maps.Size(71, 71),
                origin: new google.maps.Point(0, 0),
                anchor: new google.maps.Point(17, 34),
                scaledSize: new google.maps.Size(25, 25)
              };

              // Create a marker for each place.
              var marker = new google.maps.Marker({
                map: map,
                icon: image,
                title: place.name,
                position: place.geometry.location
              });

              markers.push(marker);

              bounds.extend(place.geometry.location);
              console.log(place.geometry.location);
            }
            map.fitBounds(bounds);
            map.setZoom(16);
          });

          google.maps.event.addListener(map, 'bounds_changed', function() {
            var bounds = map.getBounds();
            searchBox.setBounds(bounds);
          });
      }

      google.maps.event.addDomListener(window, 'load', initialize);
    </script>
    <style>
      #target {
        width: 345px;
      }
    </style>
  </head>
  <body>
    <input id="pac-input" class="controls" type="text" placeholder="Search Box">
    <div id="map-canvas"></div>
  </body>
</html>

person Ziul    schedule 16.06.2014    source источник
comment
Можете ли вы изолировать его от CEF или CefSharp, используя cefclient.exe из загрузки двоичного файла CEF? Какую версию CefSharp вы используете?   -  person jornh    schedule 17.06.2014
comment
Я использую этот NuGet: nuget.org/packages/CefSharp.WinForms в основном потому что мне нужен объект RegisterJsObject для взаимодействия с картой Google в winforms.   -  person Ziul    schedule 17.06.2014
comment
Где эти двоичные файлы и этот cefclient.exe, который вы хотите, чтобы я опробовал? Является ли этот репозиторий: github.com/cefsharp/cef-binary   -  person Ziul    schedule 17.06.2014
comment
Вы можете использовать CefSharps cefclient.exe из нашего репозитория клонов, да. (Конечно, выберите тег, соответствующий имеющемуся у вас выпуску CefSharp) Или уже скомпилированные (я думаю) из официальных двоичных выпусков исходных проектов CEF по адресу magpcss.net/cef_downloads/   -  person jornh    schedule 18.06.2014
comment
Я только что попытался использовать CefSharp.WinForms.Example.exe из главного заголовка, который, кажется, хорошо работает с акцентированными символами, и я не видел никакого усечения. Но если вам нужен RegisterJSObject, я, конечно, могу понять, почему вы выбрали CefSharp1 NuGet (пока он не доступен в мастере). Как вы, наверное, знаете, CEF1 больше не используется.   -  person jornh    schedule 18.06.2014
comment
Ах, прочитайте ваше сообщение еще раз и попробуйте еще раз. Я просто смотрел на названия улиц, а не на местность. Так что обе ошибки есть и у CefSharp от master.   -  person jornh    schedule 18.06.2014
comment
Да, я знаю, что CEF1 уходит в отставку, как только CEF3 получит реализацию RegisterJSObject, я двинусь дальше.   -  person Ziul    schedule 18.06.2014


Ответы (1)


Эй, подождите еще раз, я вижу такое же поведение (отсутствуют «Rosales» и акцент в «México») как с моим стандартным Chrome 35, так и с IE 10.

Так что, возможно, это связано с отсутствующим языковым пакетом CEF: https://github.com/cefsharp/cef-binary/tree/cef_binary_1.1364.1123/Release/locales .. используемый вами NuGet, вероятно, имеет только en-US.pak

... Протестировано немного больше с вашим примером скрипки. Удаление es.pak в моей установке не помогло. НО я вижу подобное, если я ищу "Sønderborg, Дания" в окне поиска на карте. (В некоторых местах там написано «S ** o ** nderborg», а не «ø»). Так вы уверены, что это связано с браузером, а не только с API Google?

обновить Запрос с помощью language=es, например:

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&language=es&libraries=places"></script>

Изменяет ответ от Google API. В настоящее время проверено с помощью моего iPad и вашей скрипки!

person jornh    schedule 17.06.2014
comment
Я попробовал версию Chrome 35.0.1916.153 m, испанский язык, местность и страна в порядке. Пробовал Firefox 30.0 Испанская локаль, местность и страна тоже в порядке. Пробовал IE 10.0.9200.16897, испанская локаль, тоже нормально работает. И вы правы насчет моей локали, у меня есть bin\Debug\locales\en-US.pak, должен ли я удалить его и поместить туда испанскую локаль? Подхватывает ли cef это автоматически? - person Ziul; 18.06.2014
comment
Я только что попытался разместить es.pak, но безуспешно =/ - person Ziul; 18.06.2014
comment
Возможно, потребуется настройка lang. . Попробуйте изолировать с помощью cefclient.exe. Также форум CEF может иметь более глубокие знания. - person jornh; 18.06.2014
comment
Странно, что я не могу повторить ваши успехи со стандартным Chrome/IE (для них у меня нет испанского на моих языках). Как ваши поведут себя, если убрать испанский? - person jornh; 18.06.2014
comment
Да, адресные данные усекаются, как только я меняю язык на английский. Проверено на Firefox и Chrome. Теперь, разве cef не должен работать нормально, если изменить язык на испанский? Как я могу это изменить? - person Ziul; 18.06.2014
comment
Дайте ему lang, как указано выше - ссылка на форум CEF :-) - person jornh; 18.06.2014