我有一些geoLocation代码可以在任何情况下工作但只有一个,如果用户有Safari并选择否。我在OSX 10.10中使用Safari 9.1(因此它不是Windows中的Safari 5问题)。
输入字段预先填充了来自后端的数据,但如果我们可以从浏览器更新地理位置数据,我们就会这样做。
当我在Safari中选择“是”时,它会抓取并添加正确的数据。在我选择“否”之后,它只是忽略了所有内容并执行了默认操作,要么使用默认数据提交表单,要么在不添加任何参数的情况下跟踪链接,并且警报不会发出警报。由于使链接工作的功能被注释掉了,链接甚至不能正常工作(并且它立即发生,因此setTimeout功能不是问题)。
我刚刚e.preventDefault
,它可以在其他任何地方使用。 StackOverflow提供了stopPropagation
和return false
的建议,两者都没有帮助。
这是HTML(加上一些JSP)
<div id="search">
<form action="/redir/xtsearch" method="get">
<input id="q" type="text" autocomplete="off" name="search_term" value="" placeholder="Search">
<button id="search-submit" class="get-geo-location-lat-lng" type="submit">GO</button>
<input type="hidden" name="esn" value="<c:out value='${plugin_subscriber.result.esn}' />">
<input type="hidden" name="m" value="<c:out value='${plugin_subscriber.result.mdn}' />">
<input type="hidden" name="zip" value="<c:out value='${plugin_subscriberlocation.result.postalCode}' />">
<input type="hidden" name="lat" value="<c:out value='${plugin_subscriberlocation.result.lat}' />">
<input type="hidden" name="lng" value="<c:out value='${plugin_subscriberlocation.result.long}' />">
</form>
</div>
<nav id="local">
<ul>
<li><c:choose><c:when test="${pageContext.request.contextPath == '/index'}"><a href="/retailers">Retailers</a></c:when> <c:otherwise> <a href="/appsandgames">Free Games</a> </c:otherwise></c:choose></li>
<li><a href="/traffic">Maps</a></li>
<li><a href="local" class="get-geo-location-lat-lng">Local search</a></li>
</ul>
</nav>
和JavaScript
$('.get-geo-location-lat-lng').on('click',function(e){
e.preventDefault();
e.stopPropagation();
var this_link = $(this),
this_href = $(this).attr('href'),
geoOptions = {
enableHighAccuracy: false,
timeout: 5000, // Wait 5 seconds
maximumAge: 300000 // Valid for 5 minutes
},
ESN = $('[name="esn"]').val(),
MDN = $('[name="m"]').val();
function gotCoords(lat,lng) {
if (this_link.is("button")) {
$('[name="lat"]').val(lat);
$('[name="lng"]').val(lng);
$('#search form').submit();
} else {
//get variables from velocity injected code on the page
window.location = this_href + '?brand=TF2&esn=' + ESN + '&m=' + MDN + '&lat=' + lat + '&lng=' + lng;
}
}
function noBrowserGeoLoc(){
if (this_link.is("button")) {
$('#search form').submit();
} else {
var lat = $('[name="lat"]').val(),lng = $('[name="lng"]').val();
window.location = this_href + '?brand=TF2&esn=' + ESN + '&m=' + MDN + '&lat=' + lat + '&lng=' + lng;
}
}
try {
if ('geolocation' in navigator) {
navigator.geolocation.getCurrentPosition(success, error, geoOptions);
function success(pos) {
var lat = pos.coords.latitude, lng = pos.coords.longitude;
alert('Success');
//gotCoords(lat,lng);
}
function error() {
alert('Failure');
//noBrowserGeoLoc();
}
}
setTimeout(noBrowserGeoLoc,6000); //Workaround for FireFox bug
} catch(err) {
alert('different fail');
//noBrowserGeoLoc();
}
return false;
});