1

IE8ラップトップで地理位置情報を機能させるための複数のオプションが必要で、Google Chrome Frame(機能する)とjquery polyfill(機能しようとしているもの)の両方を調査しました。例が取得された Web サイトはwebshimsであり、言及されたデモ ページが IE8 で動作することを確認しましたが、自分で例を再現することはできません。これは私のjspです:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
  <head>
    <meta charset=utf-8>
    <title>Geolocation</title>
    <script src="<c:url value="/js/jquery-1.6.4.min.js"/>" type="text/javascript"></script>
    <script src="<c:url value="/js/modernizr-latest.js"/>" type="text/javascript"></script>
    <script src="<c:url value="/js/polyfiller.js"/>" type="text/javascript"></script>
    <script type="text/javascript">
      //http://afarkas.github.com/webshim/demos/demos/geolocation.html
      $.webshims.polyfill();
      navigator.geolocation.getCurrentPosition(function(pos){ $("#status").html("found you! latitude: "+ pos.coords.latitude +"/longitude: " + pos.coords.longitude); });
    </script>
  </head>
  <body>
    <p>Finding your location: <span id="status">checking...</span></p>
  </body>
</html>

地理位置情報がネイティブにサポートされているブラウザーで動作しますが、ポリフィルは IE8 では機能していないようです。以下のエラーが表示されます。

Web ページのエラーの詳細

ユーザー エージェント: Mozilla/4.0 (互換性あり; MSIE 8.0; Windows NT 5.1; Trident/4.0; chromeframe/15.0.874.121; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) タイムスタンプ: 水、2011 年 12 月 7 日 17:48:06 UTC

メッセージ: 'navigator.geolocation' は null またはオブジェクトではありません 行: 13 文字: 7 コード: 0 URI: ../GeoLocation/jquery.action

この機能を適切に行うために何か不足していますか?

4

3 に答える 3

3

私は webshims lib の作成者です。問題を明確にするために、ここにいくつかの情報があります。

  1. geoloaction を機能させるためにオプションを設定する必要はありません。これは単なるオプションであり、init コードではありません。(一般的な設定オプションの詳細情報)

  2. はい、コードを初期化する必要があります。ジオロアクションのみが必要で、他の機能が必要ない場合は、次の行を使用する必要があります (機能の初期化に関する詳細情報):

    $.webshims.polyfill('ジオロケーション');

引数なしで polyfill メソッドを使用すると、すべての機能が実装され、ダウンロード サイズが増加します。

  1. Polyfill-Readiness (スクリプトが機能しなかった理由)。Webshims は、すべてを非同期に実装するスクリプト ローダーを使用して機能を実装するため、特定のコールバックを待つ必要があります。(機能の準備状況に関する詳細情報)

jQuery の準備ができたコールバックを待つか (これは、すべての機能が実装されるまで遅延します:

$(function(){
    //use feature here (all features + DOM are ready
});

または、できるだけ早く機能にアクセスしたい場合は、DOM-Ready の前にトリガーされる特別な Ready コールバックがあります。

$.webshims.ready('geolocation', function(){
    //use geolocation feature here
});

ドキュメントの改善方法など、ご質問やご提案がありましたら、お知らせください。

于 2012-01-05T23:32:44.117 に答える
3

最初にポリフィルを有効にする必要があります。ヘッドに次のスクリプトを含むサンプル ソースを参照してください。

$.webshims.setOptions('geolocation', {
            confirmText: '{location} wants to know your position. It is Ok to press Ok.'
        });
        //load all polyfill features
        //or load only a specific feature with $.webshims.polyfill('feature-name');
        $.webshims.polyfill();

更新: この HTML ページは IE9、IE7、Chrome の両方で正常に動作します

<!DOCTYPE html>
<html>
  <head>
    <meta charset=utf-8>
    <title>Geolocation</title>
    <script src="http://code.jquery.com/jquery-1.6.4.min.js" type="text/javascript"></script>
    <script src="http://afarkas.github.com/webshim/demos/js-webshim/minified/extras/modernizr-custom.js" type="text/javascript"></script>
    <script src="http://afarkas.github.com/webshim/demos/js-webshim/minified/polyfiller.js" type="text/javascript"></script>
    <script type="text/javascript">
      //http://afarkas.github.com/webshim/demos/demos/geolocation.html
      $.webshims.setOptions('geolocation', {
            confirmText: '{location} wants to know your position. It is Ok to press Ok.'
        });
      $.webshims.polyfill();
      $(function(){
        navigator.geolocation.getCurrentPosition(function(pos){ $("#status").html("found you! latitude: "+ pos.coords.latitude +"/longitude: " + pos.coords.longitude); });
      });
    </script>
  </head>
  <body>
    <p>Finding your location: <span id="status">checking...</span></p>
  </body>
</html>

FILE:// ではなく、必ず HTTPL// を使用して提供してください。

于 2011-12-07T18:24:53.917 に答える
0

ローカルホストでは許可されていない可能性があります。www navigator.geolocation. :)

于 2011-12-07T18:15:43.700 に答える