如果地理位置被拒绝,我需要JavaScript才能显示手动输入.
我尝试过的:
Modernizr.geolocation
navigator.geolocation
Run Code Online (Sandbox Code Playgroud)
两者均未描述用户之前是否拒绝访问地理位置.
我正在开发一种防盗软件,以获得计算机的确切位置.内置gps的笔记本在我的国家非常罕见,所以我必须在我的应用程序中使用HTML5 Geolocation.
对于Internet Explorer 9+,有一个注册表项,您可以添加URL以允许URL而无需用户验证.如果REG_DWORD在HKCU\Software\Microsoft\Internet Explorer\Geolocation\HostConsent路径浏览器下添加名为domain.com 的值,则会自动允许地理定位请求.但是,我无法运行Internet Explorer隐藏,因此不适合我,因为小偷不应该意识到并看到发生了什么.
我更喜欢第二种方式,因为Internet Explorer现在已被Microsoft终止,我认为下一版本将具有不同的结构.
如何在我的应用程序中嵌入和使用Webkit或GeckoFX?如何在此应用程序中以编程方式允许地理定位请求?
我正在尝试访问Android WebView中提供的HTML Geolocation API(使用SDK版本24).
主要问题是JavaScript中的调用navigator.geolocation.getCurrentPosition()永远不会返回(既没有错误,也没有位置数据),而在应用程序端,我检查权限并使用android.webkit.GeolocationPermissions.Callback类正确地将它们传递给WebView .
更新:这里只是澄清一下,"永不返回"我的意思是没有任何太多提供的回调navigator.geolocation.getCurrentPosition(success, error)被调用.
在我为测试它而构建的示例应用程序(只有一个托管WebView的小活动)我在清单中声明权限并在App start上正确请求它们.我看到提示,可以授予或拒绝位置信息的许可.
表现:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)
主要形式的代码:
public boolean checkFineLocationPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_FINE_LOCATION) && !mIsPermissionDialogShown) {
showPermissionDialog(R.string.dialog_permission_location);
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
PERMISSION_ACCESS_FINE_LOCATION);
}
return false;
} else {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以在运行时使用期间检查权限Context.checkSelfPermission(),我看到相应的权限被授予我的应用程序.
然后我尝试在WebView控件中打开一个网页.我在设置中启用了所有必需的选项:
mWebSettings.setJavaScriptEnabled(true);
mWebSettings.setAppCacheEnabled(true);
mWebSettings.setDatabaseEnabled(true);
mWebSettings.setDomStorageEnabled(true);
mWebSettings.setGeolocationEnabled(true);
mWebSettings.setJavaScriptCanOpenWindowsAutomatically(true);
mWebSettings.setSupportZoom(true);
Run Code Online (Sandbox Code Playgroud)
我使用以下 …
除了第一次设置cookie之外,有没有办法检测用户是否已经授予navigator.geolocation权限以返回浏览器的纬度/经度?
如果有,它是什么,所有浏览器是一样的,还是所有浏览器都不同?
根据GeoLocation API - Chrome/Safari - 权限管理和视觉差异,Chrome要求获得可撤销的一次性权限.我还没有读完这篇文章,但似乎存储权限并不是纯粹的Chrome操作.
html5 cross-browser geolocation user-permissions w3c-geolocation
我已经在我的webapp中构建了Geolocation API,所有浏览器都运行正常.Safari 8和7.1除外.在允许或不允许浏览器之后,浏览器一直要求许可,并最终导致浏览器(选项卡)无法使用.只需访问Safari中的http://html5demos.com/geo即可轻松重现.
有没有解决这个问题,或者这只是Safari中的一个错误?我搜索但找不到任何相关的东西.

我正在构建一个客户端将在其页面上安装的小脚本.地理位置不是必需的,但如果它存在,那将是很好的.有没有办法让我检查客户页面是否已请求地理定位信息,如果用户选择允许获取lat&lon而不创建另一个提示?
第一个方法返回承诺。
getCoordinates() {
return new Promise(function(resolve, reject) {
navigator.geolocation.getCurrentPosition(resolve, reject);
});
}
Run Code Online (Sandbox Code Playgroud)
返回reverseGeoCode方法的结果。
async getAddress() {
await this.getCoordinates().then(position => {
let latitude = position.coords.latitude;
let longitude = position.coords.longitude;
let url = Constants.OSMAP_URL + latitude + "&lon=" + longitude;
// Reverse geocoding using OpenStreetMap
return this.reverseGeoCode(url);
});
}
Run Code Online (Sandbox Code Playgroud)
使用自定义类进行 API 调用并返回结果。
reverseGeoCode(url) {
let requestService = new RequestService("json", url);
requestService.call().then(result => {
return result;
});
}
Run Code Online (Sandbox Code Playgroud)
我是这样称呼的:
let geoLocation = new GeoLocation();
geoLocation.getAddress().then(r => {
console.log(r);
});
Run Code Online (Sandbox Code Playgroud)
控制台日志未定义。
我正在使用Geolocation对象和getCurrentPosition().
你有没有看到每次你使用getCurrentPosition Firefox和Chrome提示这些按摩?
铬:
Example.com wants to track your physical location [allow] [deny] [ X close ]
Run Code Online (Sandbox Code Playgroud)
火狐:
Example.com wants to know your location [Share Location] [Don't Share] [Close]
Run Code Online (Sandbox Code Playgroud)
我的问题是:当用户没有"允许"或"拒绝"位置选项而是关闭提示时,如何处理?
我有这个JAVASCRIPT代码但是当用户关闭提示时它不起作用:
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
onSuccess,
onError,
{
//enableHighAccuracy: true,
timeout: 5000
//maximumAge: 120000
}
);
alert("holaaaa");
} else {
alert('Geolocation not supported.');
}
Run Code Online (Sandbox Code Playgroud)
我遇到了一些问题,请帮忙吗?
这个问题与这篇文章有关: 如何在用户允许或拒绝访问"物理位置"时调用函数?
当尝试在ios的移动Chrome上使用HTML5地理定位API时,我的应用程序会抛出"权限被拒绝"错误,甚至没有提示共享我的位置.还有其他人遇到过这个问题吗?
PS.这发生在本地和heroku实例上.
这是我在文档就绪时运行的代码
var displayCloseFoo = function(position) {
var lat = position.coords.latitude;
var lon = position.coords.longitude;
};
var displayError = function(error) {
var errors = {
1: 'Permission denied',
2: 'Position unavailable',
3: 'Request timeout'
};
alert("Error: " + errors[error.code]);
};
var runGeo = function(){
if (navigator.geolocation) {
var timeoutVal = 10 * 1000 * 1000;
navigator.geolocation.getCurrentPosition(
displayCloseFoo,
displayError,
{ enableHighAccuracy: true, timeout: timeoutVal, maximumAge: 0 }
);
}
else {
alert("Geolocation is not supported by this browser");
}
}; …Run Code Online (Sandbox Code Playgroud) 好的,我的代码在下面,所以我将解释我正在做什么以及我得到的结果.
我正在尝试使用navigator.geolocation.watchPosition获取用户位置.我已经指定了成功和错误回调.我第一次得到这个位置通常是非常不准确所以我使用watchPosition继续获取位置,直到它尝试了4次或者得到一个精确到500米以内的位置.
我遇到的问题:
它永远不会进入Android的错误回调(在HTC Sensation和三星Galaxy S3上测试).然而,在iPhone上,它似乎在50%的时间内输入错误回调.
它也永远不会超时.它一直在搜索,直到它收到一个位置.
我搜索了许多论坛帖子和许多stackoverflow问题以及地理定位和其他任何文档的规范.关于它的信息不多,更不用说这些问题了.有没有我做错了?或者这只是与位置合作的本质?
if(navigator.geolocation){
var geo_count = 0;
var wpid = navigator.geolocation.watchPosition(success, error, {
enableHighAccuracy: true,
maximumAge: 0,
timeout: 10000
});
function success(position){
alert(position.coords.accuracy)
geo_count = geo_count + 1;
if(position.coords.latitude && position.coords.longitude && position.coords.accuracy < 500){
navigator.geolocation.clearWatch(wpid);
alert('position obtained!');
}
else if(geo_count > 4){
navigator.geolocation.clearWatch(wpid);
alert('inaccurate position obtained');
}
}
function error(error){
switch(error.code){
case 1:
alert('permission denied');
break;
case 2:
alert('position unavailable');
break;
case 3:
alert('timeout');
break;
default:
alert('unknown error');
break;
}
}
}
Run Code Online (Sandbox Code Playgroud) w3c-geolocation ×10
javascript ×7
geolocation ×5
html5 ×4
android ×1
asynchronous ×1
c# ×1
ios ×1
promise ×1
safari ×1