web-dev-qa-db-ja.com

getCurrentPosition()およびwatchPosition()は、安全でないオリジンでは非推奨です

ユーザーに地理位置情報データを要求するWebサイトでこのエラーが発生しています。

getCurrentPosition()およびwatchPosition()は、安全でないオリジンでは非推奨であり、サポートは将来削除されます。アプリケーションをHTTPSなどの安全なOriginに切り替えることを検討する必要があります。詳細については、 goo.gl/rStTGz を参照してください。

つまり、基本的には単なる通知であり、Googleリンクでは廃止されたというだけです。

WebサイトをSSLに移行する予定はありません...私のような人に代わるものはありますか?

52
Jason Axelrod

次の/ jstillwellの投稿でありそうな答えを見つけました: https://github.com/stefanocudini/leaflet-gps/issues/15 基本的にこの機能はサポートされません(Chromeのみ?)将来的には、HTTPサイト専用です。 HTTPSは引き続き大丈夫であり、HTTPの使用と同等の代替を作成する計画はありません。

15
kittimiyo

HTTPSに切り替えることは、アーキテクチャによっては痛みを伴うか不可能になる可能性があるため、回避策を見つけました。 Google Maps Geolocation API を使用できます。使用制限がありますが、仕事はします。ブラウザAPIキーが必要になるため、使用をページのホスト名に制限することを忘れないでください。

失敗した場合、getCurrentPosition()メソッドへのフォールバックメソッドとして使用します。 HTTPSに切り替えるまで機能させることができます。

JSFiddlesは次のとおりです。

  • HTTPgetCurrentPosition()は失敗し、APIにフォールバックします
  • HTTPSgetCurrentPosition()は成功します
40
gogson

はい。 Google Chromeはバージョン50でこの機能を廃止しました。chromeで使用しようとした場合、エラーは次のとおりです。

getCurrentPosition() and watchPosition() are deprecated on insecure origins. To use this feature, you should consider switching your application to a secure Origin, such as HTTPS. See https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins for more details.

そのため、SSL証明書を追加する必要があります。まあ、それが唯一の方法です。

そして、今では Let's Encrypt を使用して非常に簡単です。 ガイド

そして、テスト目的でこれを試すことができます:

1.localhostはHTTP経由の安全なOriginとして扱われるため、localhostからサーバーを実行できる場合は、そのサーバーで機能をテストできるはずです。

2. chromeを実行するには、-unsafely-treat-insecure-Origin-as-secure = "http://example.com"フラグを使用します(「example.com」を実際のOriginに置き換えます)テストしたい)、これはそのOriginをこのセッションに対して安全であるとして扱います。フラグが機能するための新しいテストプロファイルを作成するには、-user-data-dir =/test/only/profile/dirも含める必要があることに注意してください。

Firefoxは、httpからのGeoLocation APIリクエストへのユーザーのアクセスも制限していると思います。 Webkitの変更ログは次のとおりです。 https://trac.webkit.org/changeset/200686

14
Asim K T

このために https://ipinfo.io APIを使用できます(私のサービスです)。最大1,000リクエスト/日(SSLサポートの有無にかかわらず)は無料です。座標、名前などを提供します。以下に例を示します。

curl ipinfo.io
{
  "ip": "172.56.39.47",
  "hostname": "No Hostname",
  "city": "Oakland",
  "region": "California",
  "country": "US",
  "loc": "37.7350,-122.2088",
  "org": "AS21928 T-Mobile USA, Inc.",
  "postal": "94621"
}

以下は、getCurrentPosition()から取得したものと一致するAPI応答を使用してcoordsオブジェクトを作成する例です。

$.getJSON('https://ipinfo.io/geo', function(response) { 
    var loc = response.loc.split(',');
    var coords = {
        latitude: loc[0],
        longitude: loc[1]
    };
});

そして、これをgetCurrentPosition()のフォールバックとして使用する方法を示す詳細な例です:

function do_something(coords) {
    // Do something with the coords here
}

navigator.geolocation.getCurrentPosition(function(position) { 
    do_something(position.coords);
    },
    function(failure) {
        $.getJSON('https://ipinfo.io/geo', function(response) { 
        var loc = response.loc.split(',');
        var coords = {
            latitude: loc[0],
            longitude: loc[1]
        };
        do_something(coords);
        });  
    };
});

http://ipinfo.io/developers/replacing-navigator-geolocation-getcurrentposition を参照してください。

11
Ben Dowling

chromeを--unsafely-treat-insecure-Origin-as-secure = "http://example.com"フラグを使用して実行できます(「example.com」を実際に使用したいOriginに置き換えます) test)。このセッションでそのOriginを安全なものとして扱います。フラグが機能するための新しいテストプロファイルを作成するには、-user-data-dir =/test/only/profile/dirも含める必要があることに注意してください。

たとえば、Windowsを使用している場合は、[開始して実行]をクリックします。

chrome --unsafely-treat-insecure-Origin-as-secure="http://localhost:8100"  --user-data-dir=C:\testprofile
5
Injection

GeoLocation APIの方が優れていることは知っていますが、SSLを使用できない人にとっては、 geopluginService などのサービスを引き続き使用できます。

ドキュメントで指定されているように、サービスurl http://www.geoplugin.net/php.gp?ip=xx.xx.xx.xxにipでリクエストを送信するだけです。出力はシリアル化された配列なので、使用する前にシリアル化を解除する必要があります。

このサービスは、geoLocationほど正確ではありませんが、それでも簡単で高速なソリューションであることに注意してください。

0

HTTPではエラーが発生します。

以下のラベルでlocalhostのアクセス許可を設定します(これらのHTTPリファラー(Webサイト)からの要求を受け入れます)。

それは私のために働いた。

0
srmilon