web-dev-qa-db-ja.com

HttpサイトがChrome-問題の場所を検出しません

本日、ユーザーの場所に基づく郵便番号の自動検出に問題があることに気づきました。他のブラウザー(Edge、IE、Firefox)でもうまく機能しました。サイトをhttpsに構成する必要がありましたが、問題なく機能しました。

例: https://www.whatismyzip.com/ は、 http://www.mapdevelopers.com/what-is-my-Zip-code.php =機能しません。

  <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAdGQKI4sEj5TZAjNCds422V_ZHevD45Fo"></script>
 <%--   <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=places"></script>--%>

 <%--     <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?libraries=places"></script>
 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>--%>
    <script type="text/javascript">


        function ShowMessages() {

            debugger;
            if (navigator.geolocation) {
                navigator.geolocation.getCurrentPosition(success);
            } else {
                alert("Geo Location is not supported on your current browser!");
            }
            function success(position) {
                debugger;
                var lat = position.coords.latitude;
                var lng = position.coords.longitude;
                var latlng = new google.maps.LatLng(lat, lng);
                var geocoder = geocoder = new google.maps.Geocoder();
                geocoder.geocode({ 'latLng': latlng }, function (results, status) {
                    if (status == google.maps.GeocoderStatus.OK) {
                        if (results[1]) {

                            var searchAddressComponents = results[0].address_components,
                             searchPostalCode = "";
                            $.each(searchAddressComponents, function () {
                                if (this.types[0] == "postal_code") {
                                    searchPostalCode = this.short_name;
                                }
                            });

                            document.getElementById('hidden1').value = searchPostalCode
                            __doPostBack('', '');


                        }
                    }
                });
            }

        }

任意のヘルプ/回避策をいただければ幸いです。

編集:Google API以外に、他に機能する代替手段はありますか?

10
Ruban J

Chrome 50で導入された新しいセキュリティルールは、Transfer Encryptionのないサイトに位置情報を送信しません。

ここ は、マッピングAPIの問題に適した代替手段です。

Chrome(50)の以前のバージョンに戻すことも解決策ですが、Web開発では、そうすることは非常に困難です。

しかし、実際には、現在ChromeのみがMapping APIおよびその他のブラウザは引き続きthem(Which gives me a short term peace of mind)をサポートします。

しかし遅かれ早かれ、これは他のブラウザでも実行される可能性があり、これは私とは異なり、既存のユーザーにとって大きな問題になる可能性があります。これは(私の場合は)長期的なプロセスであるため、httpサイトにいるよりも、httpsサイトの開発と移行を開始することをお勧めします。ただし、それらの処理には 賛否両論 があります。

4
Ruban J

以下のように、安全でない接続でHTML5 GeolocationAPIを使用することはできません。

Chrome 50、Chromeは、セキュリティで保護されていない接続によって配信されたページからHTML5 Geolocation APIを使用してユーザーの場所を取得することをサポートしなくなりました。これは、ページがつまり、Geolocation API呼び出しは、HTTPSなどの安全なコンテキストから提供する必要があります。

ただし、長期的には推奨されませんが、 Google Maps Geolocation API または GeoIP などを使用することは可能です。下記参照:

Google Maps Geolocation API、GeoIP(例として、他の地理ベースのソリューションがあります)、ユーザーが入力した郵便番号など、この変更の影響を受けないユーザーの場所を取得するために利用できるフォールバックオプションがいくつかあります。ただし、地理位置情報への継続的なアクセスを確保するための最善の方法は、HTTPSに移行することを強くお勧めします。

出典: GeolocationAPIはChrome 5 の保護されていないオリジンから削除されました

12
Gideon Pyzer

安全でないオリジンでの強力な機能の非推奨

Chrome Securityは当初、これをさまざまなブラウザ開発メーリングリストに送信していました。 flash-devの元の非推奨の電子メールを参照してください。これは、強力な新機能のために安全なオリジンを優先するという当初の考えに基づいています。

提案

https://w3c.github.io/webappsec-secure-contexts/to すでに出荷されており、(新しい、存在しない)に適合しない機能の概念の適用を開始したいと思います。時間)要件。特に、これには、完全な祖先チェーンも安全である「安全なオリジン」(HTTPSなど)でのみ強力な機能にアクセスできることがほぼ必要です。

彼らは、これらの既存の機能に安全なオリジンを要求することから始めようとしています。

Geolocation — requires secure origins as of M50 Device motion / orientation EME getUserMedia AppCache

徐々に HTTPを非セキュアとしてマークする と同様に、使用量のしきい値に基づいて、これらの機能をセキュアのみに徐々に移行する予定です。また、UXで、セキュリティで保護されていないオリジンの機能が非推奨であることを徐々に示すことも期待しています。

これらの各機能の非推奨戦略は決定されておらず、機能ごとに大きく異なる可能性があります。現在、しきい値がどうなるか、または機能がどの種類のオリジンでどれほど頻繁に使用されているかはわかりません。現在、データを収集中であり、データが入手でき次第報告します。現時点では、最終的な非推奨を除いて、確固たる計画はありません。これにより、この非推奨に取り組む最善の方法についての公開討論が促進されることを意図しています。

非推奨の強力な機能のテスト

機能が非推奨になった後、有効な証明書を持たないサーバーで機能をテストし続ける必要がある開発者の場合、次の2つのオプションがあります。

localhostはHTTP経由の安全なオリジンとして扱われるため、ローカルホストからサーバーを実行できる場合は、そのサーバーで機能をテストできるはずです。 chromeを--unsafely-treat-insecure-Origin-as-secure="http://example.com"フラグで( "example.com"を実際にテストするOriginに置き換えて)実行すると、そのOriginがこのセッションで安全であると見なされます。注また、フラグが機能するための新しいテストプロファイルを作成するには、--user-data-dir=/test/only/profile/dirを含める必要があります。

5
user6438642

これは議論の余地がないことを私は知っていますが、この答えはおそらく、アプリケーションにジオロケーションを実装したほとんどのプログラマーを表しています。

他の回答で述べられているように " GeolocationAPIはChrome 5 "の保護されていないオリジンから削除されました。
それはGoogleによる奇妙な動きです。
彼らは、変更はユーザーのプライバシーによるものだと主張しています。

これにより、ユーザーのプライバシーが著しく損なわれます。

グーグルはユーザーのプライバシーを大切にしています(笑)。
HTML5 Geolocation APIを使用して、多数のアプリケーション(CMSプラグイン、スタンドアロンアプリケーションテンプレート)を公開して開発しました。
SSL証明書を取得するように1000人のユーザーに言うことはできません。

私の見解では、Googleは、ほとんどの独立した開発者や「スーパーユーザー」がインターネットをより高価でアクセスできないようにしようとしています。

代替手段は次のとおりです。

  • GoogleのgeolocationAPIを使用する(リクエスト数が限られている、追加料金を支払う)

  • 有料サービスを利用できます。

  • SSL証明書を取得してインストールする

同じサーバー上のHTTPSロケーションとパブリックアクセスCDN(github)からジオロケーションスクリプトを読み込もうとしましたが、同じエラーが表示されました。
ChromeではウェブサイトにもSSLがインストールされている必要があります。

3
fat_mike