Webshims,IE8和Geolocation

时间:2011-12-07 18:07:17

标签: jquery html5 internet-explorer-8 geolocation webshim

我想要为我们的IE8笔记本电脑制作地理定位的多种选择,并且已经调查了谷歌Chrome浏览器框架(它的工作原理)和jquery polyfill(这是我想要的工作)。该示例的网站是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>

它适用于本地支持地理定位的任何浏览器,但是polyfill似乎没有为IE8做它的工作。我收到以下错误:

  

网页错误详情

     

用户代理:Mozilla / 4.0(兼容; MSIE 8.0; Windows NT 5.1;   三叉戟/ 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或不是对象Line:13   字符:7代码:0 URI:../ GeoLocation / jquery.action

我是否遗漏了使这项功能正常的事情?

3 个答案:

答案 0 :(得分:3)

您需要先激活polyfill。请参阅其中包含以下脚本的示例源:

$.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>

确保使用HTTPL //而不是FILE://

来提供服务

答案 1 :(得分:3)

我是webshims lib的创建者。为了澄清你的问题,这里有一些信息。

  1. 您无需设置选项即可进行地理定位。这只是一个选项,而不是init代码。 (有关设置options in general)的更多信息

  2. 是的,您必须初始化您的代码,如果您只需要地理位置而不需要其他任何功能,则应使用以下行(有关initialiazing features的更多信息):

    $ webshims.polyfill( '地理位置');

  3. 如果使用不带任何参数的polyfill方法,将实现所有功能,这会增加下载大小。

    1. Polyfill-Readiness(原因,为什么你的脚本不起作用)。 Webshims使用脚本加载器实现这些功能,该脚本加载器实现了所有异步,因此您必须等待特定的回调。 (有关readyness of a feature
    2. 的更多信息

      要么等待jQuery的准备回调(这是delaey直到所有功能都已实现:

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

      或者,如果您想尽快访问您的功能,则会有一个特殊的就绪回调,它将在DOM-Ready之前触发:

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

      如果您有任何问题或任何建议,包括如何改进文档,请告知我们。

答案 2 :(得分:0)

在localhost尝试推送到www时,不允许navigator.geolocation。 :)