是啥导致 Safari 无法在此代码中获取 navigator.geolocation.getCurrentPosition?

Posted

技术标签:

【中文标题】是啥导致 Safari 无法在此代码中获取 navigator.geolocation.getCurrentPosition?【英文标题】:What is causing Safari to fail at getting navigator.geolocation.getCurrentPosition in this code?是什么导致 Safari 无法在此代码中获取 navigator.geolocation.getCurrentPosition? 【发布时间】:2012-12-20 00:32:01 【问题描述】:

第二次更新: 由于没有修复 Safari 和其他一些奇怪的行为,我决定使用这个选择为 Safari 用户创建所有新的无聊内容(基本上放弃了 Safari 的脚本).. .

<?php if($detect->version('Safari'))   ?>
$(function() 
    /* create second option because Safari sucks? */
    $("#gotorep").remove();
    $("#entersite").remove();
    $("#entersite2").css('display':'inline');
);
<?php  elseif($detect->isMobile())   ?>
   function startfunc() 
      if(navigator.geolocation) 
.
.
.

错误更新(已修复,已删除):我在 Safari 中的错误是 35772ReferenceError: Can't find variable: fail in this location...

 $(function() 
    if(navigator && navigator.geolocation) 
        var fallback = setTimeout(function()  fail('10 seconds expired'); , 10000);
***http://devv.referadiabetic.com/:35772ReferenceError: Can't find variable: fail
        navigator.geolocation.getCurrentPosition(
                function (pos) 
                    clearTimeout(fallback);

原始问题:我可以让它在除 Safari 之外的其他移动设备/浏览器中工作。在 iphone 上它失败了,所以用 ! 反转了 if 选择。并在具有相同问题的 Safari 桌面浏览器中进行了测试,一旦我同意就不会返回我的数据。这是我现在正在使用的代码块...

<?php if(!($detect->isMobile()))   ?>
$(function() 
    if(navigator && navigator.geolocation) 
        var fallback = setTimeout(function()  fail('10 seconds expired'); , 10000);
        navigator.geolocation.getCurrentPosition(
                function (pos) 
                    clearTimeout(fallback);
                    var point = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
                    new google.maps.Geocoder().geocode('latLng': point, function (res, status) 
                        if(status == google.maps.GeocoderStatus.OK && typeof res[0] !== 'undefined') 
                            var zip = res[0].formatted_address.match(/,\s\w2\s(\d5)/);
                            if(zip) 
                                var zipcodepassed = zip[1];
                                $("#em").html(zipcodepassed);
                                var reps = reps_load;
                                var ads_repList_URLtoFullName = ads_repList_URLtoFullName_load;
                                var rek = ads_repList_URLtoFullName;
                                var rep = reps[zipcodepassed];
                                    if (rep == undefined || rep == null || rep == "") 
                                            $(function() 
                                                $("#gotorep").remove();
                                                $("#entersite").remove();
                                                $("#entersite2").css('display':'inline');
                                            );
                                    
                                var repname = rek[rep]; //i.e. shaner will be Shane Reaume in repname variable
                                $("#yourrep").html(repname);
                                $("a[href='http://devv.referadiabetic.com']").attr('href', 'http://devv.referadiabetic.com/' + rep);
                            
                        
                    );

                
        );

    
);

我已经有这个作为后备,我正在使用 IP 地址来获取邮政编码,但由于移动设备的性质,我将它们设置为执行此代码块。

【问题讨论】:

它发生在桌面 Safari 上,对吗?弹出打开开发者工具并在控制台运行时观察控制台,您可能会在那里看到错误。 @Charles 我在顶部分享了我的错误,现在正在调查,谢谢。 【参考方案1】:

setTimeout 期望第一个参数是一些代码的字符串或对函数的调用。我相信它正在尝试将fail 解析为字符串,并且...呃...失败了。

setTimeout("function() fail('10 seconds expired');", 10000);

【讨论】:

根据MDN,您应该可以直接将函数传递给setTimeout,没有问题。代码,正如你改变的那样,实际上只会返回一个函数......但它并没有真正在任何地方返回,所以它基本上是一个空操作。当然,这并不能阻止 fail 没有在 setTimeout 的上下文中定义,这是根本问题。 我同意,但 Safari 肯定对fail 有一些问题。这个时候我通常会看看是不是保留字,但我已经知道不是。 @Charles 我删除了后备,现在我没有收到错误,但它也没有返回位置。

以上是关于是啥导致 Safari 无法在此代码中获取 navigator.geolocation.getCurrentPosition?的主要内容,如果未能解决你的问题,请参考以下文章

是啥导致桌面 Safari html 音频 currentTime 不准确?

011111100 在此 LC-3 代码中指的是啥?

是啥导致无法在“ServiceWorkerGlobalScope”上执行“获取”:“仅当缓存”只能设置为“同源”模式错误?

PhoneGap:在 Safari 中打开外部 URL

Safari错误。 Javascript ajax json对象 - 无法获取属性。对象可能不再存在

带有video.js的HTML5视频无法在Safari中使用