是什么导致Safari在此代码中获取navigator.geolocation.getCurrentPosition失败?

时间:2012-12-20 00:32:01

标签: php javascript ios mobile geolocation

第二次更新:由于没有修复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:无法找到变量:在此位置失败...

 $(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上它失败了,所以如果选择了!并在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\w{2}\s(\d{5})/);
                            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地址来获取邮政编码,但由于移动设备的性质,我正在设置这些以执行此代码块。

1 个答案:

答案 0 :(得分:1)

setTimeout期望第一个参数是某些代码的字符串或对函数的调用。我相信它试图将fail解析为一个字符串,然后......呃...失败。

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