web-dev-qa-db-ja.com

HTML 5 Geo Location Prompt in Chrome

HTML 5に着手し、地理的位置をテストし始めたところです。しかし、少しスピードバンプを打っています...位置情報を取得しようとすると、chromeは自動的に位置情報の取得からページをブロックします。これは他のサイトでは発生しません。以下のサイト:

http://html5demos.com/geo

私が使用しているスクリプト:

<script type="text/javascript" JavaScript" SRC="geo.js"></script>   
<script type="text/javascript" JavaScript" SRC="Utility.js"></script> 
<script type="text/javascript" JavaScript" SRC="jquery.js"></script> 
<script type="text/javascript" JavaScript" SRC="modernizr.js"></script>  

function get_location() {

        if (geo_position_js.init()) {
            geo_position_js.getCurrentPosition(show_map, handle_error);
        }

    }
    function show_map(position) {
        var latitude = position.coords.latitude;
        var longitude = position.coords.longitude;

        alert("lat:" + latitude + " long:" + longitude);


    }
    function handle_error(err) {
        alert(err.code);
        if (err.code == 1) {
            // user said no!
        }
    }

    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(show_map, handle_error);
    } else {
        error('not supported');
    }

私は自分のマシンのローカルディレクトリからこれをテストしているので、実際には「http://whatever.com/mytestpage.html」のような「ドメイン」はありません。これがプロンプトが表示されない理由ですか?もしそうなら、ユーザーの地理的位置を取得する許可をブラウザに強制することは可能ですか?私のシナリオでは可能ですか?

68

Chromeには、file:/// URI。ただし、残念ながら、それを示すエラーは記録されていないようです。ローカルWebサーバーから動作します。 pythonがインストールされている場合、テストファイルがあるディレクトリでコマンドプロンプトを開き、コマンドを発行してみてください。

python -m SimpleHTTPServer

ポート8000​​でWebサーバーを起動する必要があります(別のポートである可能性がありますが、コンソールでリッスンしているポートが表示されます)。次に、 http:// localhost:8000/mytestpage.html

pythonがない場合、Rubyには同等のモジュールがあります。または、Visual Web Developer ExpressにはローカルWebサーバーが組み込まれています。

97
robertc

上記のどれも私を助けませんでした。

少し調査した結果、M50(2016年4月)の時点で- Chromeでは、Geolocationにセキュアなオリジン(HTTPSなど)が必要になりました であることがわかりました。

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

ホスト「localhost」は特別なb/cであり、「潜在的に安全」です。開発マシンにデプロイしている場合、開発中にエラーが表示されない場合があります。

25
Ryan

Robertcによる回答で既に述べたように、Chromeはローカルファイルのある地理的位置などの特定の機能をブロックします。独自のWebサーバーをセットアップするより簡単な方法は、start Chromeをparameter--allow-file-access-from-filesで開始することです。設定でジオロケーションをオフにしない限り、ジオロケーションを使用できます。

6
Tobias

サーバーの背後でホストしているが、まだ問題に直面している場合:localhost127.0.0.1http:// localhost:8080 / to http://127.0.0.1:8080/

私が直面していた問題は、Eclipse内でApache Tomcatを使用してサイトを提供していたことでしたIDE(Eclipse luna)。

私の健全性チェックでは、Remy Sharpのデモを使用していました: https://github.com/remy/html5demos/blob/eae156ca2e35efbc648c381222fac20d821df494/demos/geo.html

サーバーでコードをホストしているにも関わらず、エラー関数を微調整した後にエラーが発生していました(firefoxでのみ動作し、chrome and safari)で失敗しました):

「ユーザーはジオロケーションを拒否しました」

より詳細なエラーメッセージを取得するために、次の変更を行いました。

function error(msg) {
  var s = document.querySelector('#status');
  msg = msg.message ? msg.message : msg; //add this line
  s.innerHTML = typeof msg == 'string' ? msg : "failed";
  s.className = 'fail';

  // console.log(arguments);
}

http://10.0.2.2:808 のvirtualbox IE10の背後にあるInternet Explorerで失敗します:

「現在の場所を特定できません」

2
davidtingsu

設定でブロックされていないことを確認してください

http://www.howtogeek.com/howto/16404/how-to-disable-the-new-geolocation-feature-in-google-chrome/

2
Bishoy Hanna

最も簡単な方法は、アドレスバーの左側の領域をクリックして、場所の設定を変更することです。 file:///に対してもロケーションオプションを設定できます

enter image description here

2
Marina Dunst

簡単な回避策として、HTMLファイルをDropboxなどのクラウド共有にコピーし、ブラウザーで共有リンクを使用します。簡単です。

1
Mark Whitener

Geolocation APIを試しているときにも、この問題がありました。その後、IIS Visual Studioを介してExpressを開始し、ページにアクセスしましたが、すべてのブラウザーで問題なく動作しました。

0
Dilip Agheda