摘要:獲取地理位置的方式,介紹兩種,一種是使用微信的接口,另外一種是使用百度地圖。到此為止,在微信瀏覽器中獲取用戶的地理位置即可完成,在用戶首次進(jìn)入該頁(yè)面時(shí),會(huì)提示用戶是否給頁(yè)面授權(quán)使用地理位置,授權(quán)成功之后,將不會(huì)再次提示。
獲取地理位置的方式,介紹兩種,一種是使用微信的JSSDK接口,另外一種是使用百度地圖API。
1.微信JSSDK獲取地理位置在微信瀏覽器中,使用JSSDK提供的接口,定位設(shè)備所在的位置,步驟如下:
step1,綁定域名先登錄微信公眾平臺(tái)進(jìn)入“公眾號(hào)設(shè)置”的“功能設(shè)置”里填寫“JS接口安全域名”(使你的域名獲得使用接口的權(quán)限)
備注:登錄后可在“開發(fā)者中心”查看對(duì)應(yīng)的接口權(quán)限。
在需要調(diào)用JS接口的頁(yè)面引入如下JS文件,(支持https):
https://map.qq.com/api/js?v=2...
http://res.wx.qq.com/open/js/...
備注:支持使用 AMD/CMD 標(biāo)準(zhǔn)模塊加載方法加載
備注:
1.所有需要使用JSSDK的頁(yè)面都必須配置config,否則無法調(diào)用
2.相同的URL只會(huì)觸發(fā)一次,如果是動(dòng)態(tài)變化的URL,則會(huì)在變化時(shí)主動(dòng)去觸發(fā)
3.Android微信客戶端不支持pushState的H5新特性,所以使用pushState來實(shí)現(xiàn)web app的頁(yè)面會(huì)導(dǎo)致簽名失敗,此問題會(huì)在Android6.2中修復(fù)
4.在js中,可以通過ajax請(qǐng)求去后臺(tái)獲取appId這些,在PHP中可以通過微信JSSDK中的方式獲??;
$.ajax({ type: "get", url: "后臺(tái)接口URL,去獲取appId等", dataType: "jsonp", //與后臺(tái)商議JSONP或者JSON jsonp: "callback", data: { url: location.href.split("#")[0] //當(dāng)前頁(yè)面的URL,此種方式是為了避免在微信中分享只后,會(huì)在URL后追加"#fdsfsd",在這里只需要拿到#之前的部分作為合理的URL }, success: function (result) { console.log(result); if (result.status == 0) { wx.config({ debug: false, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來,若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會(huì)通過log打出,僅在pc端時(shí)才會(huì)打印。 appId: result.data.appid, // 必填,公眾號(hào)的唯一標(biāo)識(shí) timestamp: result.data.timestamp, // 必填,生成簽名的時(shí)間戳 nonceStr: result.data.noncestr, // 必填,生成簽名的隨機(jī)串 signature: result.data.signature, // 必填,簽名 jsApiList: ["checkJsApi","getLocation"] // 必填,使用的JSSSK接口,其中checkJSAPI是必填的,可以提前檢測(cè)客戶端是否支持你所使用的接口,如果不支持,則采用其他方式處理 }); } }, error: function(err){ console.log(err); //ajax請(qǐng)求失敗 } })step4,通過ready接口處理成功驗(yàn)證
wx.ready(function(){
// config信息驗(yàn)證后會(huì)執(zhí)行ready方法,所有接口調(diào)用都必須在config接口獲得結(jié)果之后, // config是一個(gè)客戶端的**異步操作**,所以如果需要在頁(yè)面加載時(shí)就調(diào)用相關(guān)接口,則須把相關(guān)接口放在**ready函數(shù)中調(diào)用來確保正確執(zhí)行**。 // 對(duì)于用戶觸發(fā)時(shí)才調(diào)用的接口,則可以直接調(diào)用,不需要放在ready函數(shù)中。
});
所有接口通過wx對(duì)象(也可使用jWeixin對(duì)象)來調(diào)用,參數(shù)是一個(gè)對(duì)象,除了每個(gè)接口本身需要傳的參數(shù)之外,還有以下通用參數(shù):
1.success:接口調(diào)用成功時(shí)執(zhí)行的回調(diào)函數(shù)。
2.fail:接口調(diào)用失敗時(shí)執(zhí)行的回調(diào)函數(shù)。
3.complete:接口調(diào)用完成時(shí)執(zhí)行的回調(diào)函數(shù),無論成功或失敗都會(huì)執(zhí)行。
4.cancel:用戶點(diǎn)擊取消時(shí)的回調(diào)函數(shù),僅部分有用戶取消操作的api才會(huì)用到。
5.trigger: 監(jiān)聽Menu中的按鈕點(diǎn)擊時(shí)觸發(fā)的方法,該方法僅支持Menu中的相關(guān)接口。
備注:不要嘗試在trigger中使用ajax異步請(qǐng)求修改本次分享的內(nèi)容,因?yàn)榭蛻舳朔窒聿僮魇且粋€(gè)同步操作,這時(shí)候使用ajax的回包會(huì)還沒有返回。
以上幾個(gè)函數(shù)都帶有一個(gè)參數(shù),類型為對(duì)象,其中除了每個(gè)接口本身返回的數(shù)據(jù)之外,還有一個(gè)通用屬性errMsg,其值格式如下:
調(diào)用成功時(shí):"xxx:ok" ,其中xxx為調(diào)用的接口名
用戶取消時(shí):"xxx:cancel",其中xxx為調(diào)用的接口名
wx.ready(function () { wx.getLocation({ type: "wgs84", // 默認(rèn)為wgs84的gps坐標(biāo),如果要返回直接給openLocation用的火星坐標(biāo),可傳入"gcj02" success: function (res) { // res 中返回經(jīng)度和緯度,可以根據(jù)需求是否轉(zhuǎn)換為QQ地圖的精度 let geocoder = new qq.maps.Geocoder({ complete: function (result) { // result的值打印出來如下所示,可以拿到地址和對(duì)應(yīng)的城市名等信息,見下圖。 var city = result.detail.addressComponents.city; // to do what you want } }) var coord = new qq.maps.LatLng(res.latitude, res.longitude) geocoder.getAddress(coord); }, cancel: function (res) { console.log("用戶拒絕授權(quán)獲取地理位置"); }, fail: function (res) { alert(JSON.stringify(res)); } }); });step5,通過error接口處理失敗驗(yàn)證
wx.error(function(res){
// config信息驗(yàn)證失敗會(huì)執(zhí)行error函數(shù),如簽名過期導(dǎo)致驗(yàn)證失敗,具體錯(cuò)誤信息可以打開config的debug模式查看,也可以在返回的res參數(shù)中查看,對(duì)于SPA可以在這里更新簽名。
});
到此為止,在微信瀏覽器中獲取用戶的地理位置即可完成,在用戶首次進(jìn)入該頁(yè)面時(shí),會(huì)提示用戶是否給頁(yè)面授權(quán)使用地理位置,授權(quán)成功之后,將不會(huì)再次提示。
2.百度地圖API獲取地理位置 step1,引入js文件http://api.map.baidu.com/api?...
step2,初始化位置對(duì)象,調(diào)用getCurrentPosition方法獲取位置var geolocation = new BMap.Geolocation(); geolocation.getCurrentPosition(function(r){ if(this.getStatus() == BMAP_STATUS_SUCCESS){ alert("您的位置:"+r.point.lng+","+r.point.lat); } else { alert("failed"+this.getStatus()); } },{enableHighAccuracy: true})step3,將經(jīng)緯度轉(zhuǎn)換為具體位置
**此方法應(yīng)該在getCurrentPosition的回調(diào)中執(zhí)行;** geoc.getLocation(r.point, function(rs){ var addComp = rs.addressComponents; alert(addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber); }
即可打印出你現(xiàn)在的街道的位置,很簡(jiǎn)單對(duì)不對(duì)?。。?br>但是在微信中使用此方法時(shí),每次進(jìn)入頁(yè)面都會(huì)提示用戶授權(quán),可能是微信自己的隱私保護(hù)之類的原因吧。
福利筆記^_^獲取當(dāng)前URL中的參數(shù),需要注意的是最后的decodeURI,對(duì)于有中文的參數(shù)值非常有用。
function GetQueryString(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if(r!=null) return decodeURI(r[2]);
參考文獻(xiàn):
https://mp.weixin.qq.com/wiki...
http://lbsyun.baidu.com/jsdem...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/95731.html
摘要:多個(gè)標(biāo)簽原生表單部件通用屬性默認(rèn)這個(gè)布爾屬性允許您指定當(dāng)頁(yè)面加載時(shí)元素應(yīng)該自動(dòng)具有輸入焦點(diǎn),除非用戶覆蓋它,例如通過鍵入不同的控件。元素的名稱這是用于表單數(shù)據(jù)提交的。到目前為止,表單是最常見的攻擊媒介可能發(fā)生攻擊的地方。 表單介紹 HTML表單是用戶和web站點(diǎn)或應(yīng)用程序之間交互的主要內(nèi)容之一。它們?cè)试S用戶將數(shù)據(jù)發(fā)送到web站點(diǎn)。大多數(shù)情況下,數(shù)據(jù)被發(fā)送到web服務(wù)器,但是web頁(yè)面也...
摘要:前綴規(guī)范每個(gè)局部變量都需要有一個(gè)類型前綴,按照類型可以分為表示字符串。例如,表示以上未涉及到的其他對(duì)象,例如,表示全局變量,例如,是一種區(qū)分大小寫的語言。布爾值與字符串相加將布爾值強(qiáng)制轉(zhuǎn)換為字符串。 基本概念 javascript是一門解釋型的語言,瀏覽器充當(dāng)解釋器。js執(zhí)行時(shí),在同一個(gè)作用域內(nèi)是先解釋再執(zhí)行。解釋的時(shí)候會(huì)編譯function和var這兩個(gè)關(guān)鍵詞定義的變量,編譯完成后從...
摘要:中的跨域請(qǐng)求應(yīng)該也算是一個(gè)重點(diǎn),具體什么叫跨域,在這里我就不展開了,可以查一下瀏覽器的同源策略和跨域的定義。再看后臺(tái)文件文件接收回調(diào)函數(shù)并把要返回的參數(shù)以參數(shù)注入的方式注入到回調(diào)函數(shù)中,再返回給客戶端。 js中的跨域請(qǐng)求應(yīng)該也算是一個(gè)重點(diǎn),具體什么叫跨域,在這里我就不展開了,可以查一下瀏覽器的同源策略和跨域的定義。原來只知道常用的jsonp和document.domain這兩種方式,這...
摘要:前者用于服務(wù)器,后者用于瀏覽器。某些打包工具可以允許或要求使用擴(kuò)展名。的形式需要的支持,比如將導(dǎo)出在中的對(duì)象或值。如上,也是的內(nèi)容,和是一對(duì)。比如如命名導(dǎo)出引入的命名導(dǎo)出等價(jià)為,值得注意的是在該模塊中不能直接使用和。 import import 和 require 的區(qū)別 import 和js的發(fā)展歷史息息相關(guān),歷史上 js沒有模塊(module)體系,無法將一個(gè)大程序拆分成互相依賴的...
閱讀 3679·2021-11-24 09:39
閱讀 1288·2021-09-30 09:48
閱讀 3276·2021-09-09 11:51
閱讀 2900·2021-09-08 10:41
閱讀 1340·2019-08-30 14:06
閱讀 2809·2019-08-30 14:01
閱讀 884·2019-08-29 17:11
閱讀 3183·2019-08-29 15:37