js 获取微信地理位置 是不是允许的提示样式能改吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 获取微信地理位置 是不是允许的提示样式能改吗相关的知识,希望对你有一定的参考价值。
<?phpclass JSSDK
private $appId;
private $appSecret;
public function __construct($appId, $appSecret)
$this->appId = $appId;
$this->appSecret = $appSecret;
public function getSignPackage()
$jsapiTicket = $this->getJsApiTicket();
// 注意 URL 一定要动态获取,不能 hardcode.
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$timestamp = time();
$nonceStr = $this->createNonceStr();
// 这里参数的顺序要按照 key 值 ASCII 码升序排序
$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";
$signature = sha1($string);
$signPackage = array(
"appId" => $this->appId,
"nonceStr" => $nonceStr,
"timestamp" => $timestamp,
"url" => $url,
"signature" => $signature,
"rawString" => $string
);
return $signPackage;
private function createNonceStr($length = 16)
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$str = "";
for ($i = 0; $i < $length; $i++)
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
return $str;
private function getJsApiTicket()
// jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
$data = json_decode(file_get_contents("jsapi_ticket.json"));
if ($data->expire_time < time())
$accessToken = $this->getAccessToken();
// 如果是企业号用以下 URL 获取 ticket
// $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
$res = json_decode($this->httpGet($url));
$ticket = $res->ticket;
if ($ticket)
$data->expire_time = time() + 7000;
$data->jsapi_ticket = $ticket;
$fp = fopen("jsapi_ticket.json", "w");
fwrite($fp, json_encode($data));
fclose($fp);
else
$ticket = $data->jsapi_ticket;
return $ticket;
private function getAccessToken()
// access_token 应该全局存储与更新,以下代码以写入到文件中做示例
$data = json_decode(file_get_contents("access_token.json"));
if ($data->expire_time < time())
// 如果是企业号用以下URL获取access_token
// $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
$res = json_decode($this->httpGet($url));
$access_token = $res->access_token;
if ($access_token)
$data->expire_time = time() + 7000;
$data->access_token = $access_token;
$fp = fopen("access_token.json", "w");
fwrite($fp, json_encode($data));
fclose($fp);
else
$access_token = $data->access_token;
return $access_token;
private function httpGet($url)
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
追问
我要的是弹出的,是否允许获取地理位置的弹框是否能自定义
参考技术A 可以。具体步骤:
1.方法一:在弹出窗口<body>加上代码:onblur="self.focus()"<body onblur="self.focus()">
2.方法二:用showModalDialog方法建立模式对话框。
<script>
function topwin()
</script>
3.方法三:用showModelessDialog方法建立无模式对话框。
<script>
function topwin()
</script>
检测是不是已经允许 W3 地理位置
【中文标题】检测是不是已经允许 W3 地理位置【英文标题】:Detect if W3 Geolocation has already been allowed检测是否已经允许 W3 地理位置 【发布时间】:2011-11-04 19:14:34 【问题描述】:我的网站上有一个谷歌地图,当用户点击“获取当前位置”按钮时,我正在使用 W3 Geolocation 来检测用户的位置。然后它应该在浏览器窗口顶部弹出允许/拒绝信息栏。
我不想提示所有访问者访问地理位置,但我想以某种方式记住用户是否已经允许地理位置并在允许的情况下运行地理位置。
根据我的研究,这是不可能的,但我希望以前有人遇到过这种情况。我认为可以做到这一点的唯一方法是设置一个 cookie。
谢谢!
【问题讨论】:
没有 API 调用可以知道用户是否允许访问位置。只有 getCurrentPosition 或 watchPosition,显示提示。因此,以某种方式设置 cookie 或存储用户选择似乎是唯一的方法。 谷歌浏览器不会再次询问用户是否允许检测他的位置一次。 我没有足够的声望来写评论。该问题仅在谷歌浏览器中发生,因为他们将其删除,但在其他浏览器中没有。我找到的唯一解决方案是使用 cookie,但问题是用户可以转到浏览器设置并禁用本地化,但他们无法知道这一点,用户也可以更改位置而你不会知道。跨度> 【参考方案1】:这不是你想要的,但我认为它会有所帮助。
根据W3C draft,您可以尝试从浏览器获取任何缓存值(无需用户确认)或回退到自定义方法,如果没有找到缓存值。
假设用户同意提供地理位置,它将被缓存。来自同一 W3C 草案的示例:
// Request a position. We only accept cached positions, no matter what
// their age is. If the user agent does not have a cached position at
// all, it will immediately invoke the error callback.
navigator.geolocation.getCurrentPosition(successCallback,
errorCallback,
maximumAge:Infinity, timeout:0);
【讨论】:
以上是关于js 获取微信地理位置 是不是允许的提示样式能改吗的主要内容,如果未能解决你的问题,请参考以下文章