是啥导致 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 不准确?
是啥导致无法在“ServiceWorkerGlobalScope”上执行“获取”:“仅当缓存”只能设置为“同源”模式错误?