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