日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

html5怎样实现信息抓取,HTML5获取定位简单方案

發(fā)布時(shí)間:2023/12/15 HTML 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 html5怎样实现信息抓取,HTML5获取定位简单方案 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

由來

一個(gè)客戶提出一個(gè)需求,想在xiunobbs中實(shí)現(xiàn),發(fā)帖時(shí)顯示 定位信息,然后在查看時(shí) 可以實(shí)現(xiàn),如果是Android或IOS端安裝了百度地圖APP的可以喚起,否則就和網(wǎng)頁P(yáng)C端的一樣,直接跳轉(zhuǎn)到網(wǎng)頁版的百度地圖并定位到改點(diǎn)。

簡單實(shí)現(xiàn)步驟:

發(fā)帖時(shí)增加按鈕,可以選擇是否獲取定位

將獲取到的經(jīng)緯度數(shù)值 通過 百度JavaScript API來逆向解析,得到省、市、縣、街道等信息。

查看帖子時(shí),將經(jīng)緯度再次拼接成URI,供客戶端喚起服務(wù)。

大致步驟如上吧,具體如何制作的xiunobbs插件這里就不談了。

geolocation對(duì)象

該對(duì)象有三個(gè)方法:

注冊(cè)一個(gè)位置改變監(jiān)聽器,每當(dāng)設(shè)備位置改變時(shí),返回一個(gè) long 類型的該監(jiān)聽器的ID值。

取消由 watchPosition()注冊(cè)的位置監(jiān)聽器。

增加按鈕

這個(gè)不是本篇主要內(nèi)容,也就一筆帶過吧。

image.png

hook了post_message_after.htm 這個(gè)位置加入了

使用位置Secondary

獲取當(dāng)前定位

利用getCurrentPosition()方法來獲取位置得到經(jīng)緯度。

語法

navigator.geolocation.getCurrentPosition(success, error, options)

參數(shù)

success

成功得到位置信息時(shí)的回調(diào)函數(shù),使用Position 對(duì)象作為唯一的參數(shù)。

error 可選

獲取位置信息失敗時(shí)的回調(diào)函數(shù),使用 PositionError 對(duì)象作為唯一的參數(shù),這是一個(gè)可選項(xiàng)。

options 可選

于是簡單寫了下代碼

$(".get-location").click(function () {

// $(this).preventDefault();

var options = {

enableHighAccuracy : true,

maximumAge : 1000

};

// alert('this is getLocation()');

if (navigator.geolocation) {

//瀏覽器支持geolocation

console.log('support');

$(".location-str").removeClass("d-none");

$(".location-str").text("正在獲取中……")

navigator.geolocation.getCurrentPosition(onSuccess, onError, options);

} else {

//瀏覽器不支持geolocation

alert('您的瀏覽器不支持地理位置定位');

}

return false;

});

onSuccess和onError分別如下

function onSuccess(position) {

// 用戶位置字符串

var locationStr = "";

//返回用戶位置

//經(jīng)度

var longitude = position.coords.longitude;

//緯度

var latitude = position.coords.latitude;

$(".location-str").text('當(dāng)前地址的經(jīng)緯度:經(jīng)度' + longitude + ',緯度' + latitude);

}

function onError(error) {

switch (error.code) {

case 1:

alert("位置服務(wù)被拒絕");

break;

case 2:

alert("暫時(shí)獲取不到位置信息");

break;

case 3:

alert("獲取信息超時(shí)");

break;

case 4:

alert("未知錯(cuò)誤");

break;

}

}

這樣簡單的就能獲取到經(jīng)緯度了。

結(jié)合百度地圖逆向解析

它給出的示例代碼如下

var map = new BMap.Map("l-map"); // 這個(gè)是顯示的div class類名 如果不顯示無需寫

map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);

// 創(chuàng)建地理編碼實(shí)例

var myGeo = new BMap.Geocoder();

// 根據(jù)坐標(biāo)得到地址描述

myGeo.getLocation(new BMap.Point(116.364, 39.993), function(result){

if (result){

alert(result.address);

}

});

image.png

image.png

完善一下之前的onSuccess函數(shù)

function onSuccess(position) {

// 用戶位置字符串

var locationStr = "";

//返回用戶位置

//經(jīng)度

var longitude = position.coords.longitude;

//緯度

var latitude = position.coords.latitude;

$(".location-str").text('當(dāng)前地址的經(jīng)緯度:經(jīng)度' + longitude + ',緯度' + latitude);

var point = new BMap.Point(longitude, latitude);

var gc = new BMap.Geocoder();

gc.getLocation(point, function(rs) {

locationStr = rs.address;

$(".location-str").text(locationStr);

$("#location").val(locationStr + "|" + longitude + "|" + latitude);

console.log($("#location").val());

});

}

將之前獲取到的經(jīng)緯度,傳參進(jìn)入,調(diào)用這個(gè)方法,然后拿到解析后的address地址內(nèi)容。將id為location的這個(gè)內(nèi)容賦值為address字符串內(nèi)容。(這個(gè)是為了提交到后端,下次讀取帖子時(shí)可以拿到。PS:這里得注意下XSS)

顯示效果:

image.png

(PC端不準(zhǔn),還有其他因素,結(jié)果定位到洛杉磯了):)

點(diǎn)擊喚起百度地圖APP

簡單的定位也拿到了,然后該顯示了。

hook顯示位

這里還是簡單帶過下顯示的地方,hook了thread_plugin_before.htm這個(gè)點(diǎn)。

list($location_str,$lng,$lat) = explode('|',$first['location']);

// 網(wǎng)頁版

$baidu_pc_map_url = 'http://api.map.baidu.com/geocoder?location='.$lat.','.$lng.'&output=html&src=webapp.baidu.openAPIdemo';

// 安卓端

$android_url = 'bdapp://map/geocoder?location='.$lat.','.$lng.'&src=andr.baidu.openAPIdemo';

// IOS端

$ios_url = 'baidumap://map/geocoder?location='.$lat.','.$lng.'&src=ios.baidu.openAPIdemo';

?>

href="<?php echo $baidu_pc_map_url;?>" style="text-decoration: none;color: #fff;" id="location_url"><?php echo $location_str;?>

下面的js操作是hook的thread_js.htm。

喚起應(yīng)用

喚起的邏輯簡單如下:

PC端:直接顯示百度地圖web地址

Mobile端:

Android端:Android的百度地圖APP

IOS|iPhone|iPad端:iOS的百度地圖APP

利用uri的反向地址解析來完成,從手冊(cè)中可以查到三個(gè)分別是

http://api.map.baidu.com/geocoder 網(wǎng)頁

bdapp://map/geocoder?location 安卓

baidumap://map/geocoder?location IOS

然后就是利用JavaScript來判斷下:

var browser={

versions:function(){

var u = navigator.userAgent, app = navigator.appVersion;

return {//移動(dòng)終端瀏覽器版本信息

trident: u.indexOf('Trident') > -1, //IE內(nèi)核

presto: u.indexOf('Presto') > -1, //opera內(nèi)核

webKit: u.indexOf('AppleWebKit') > -1, //蘋果、谷歌內(nèi)核

gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐內(nèi)核

mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否為移動(dòng)終端

ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios終端

android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android終端或者uc瀏覽器

iPhone: u.indexOf('iPhone') > -1 , //是否為iPhone或者QQHD瀏覽器

iPad: u.indexOf('iPad') > -1, //是否iPad

webApp: u.indexOf('Safari') == -1 //是否web應(yīng)該程序,沒有頭部與底部

};

}(),

language:(navigator.browserLanguage || navigator.language).toLowerCase()

}

$("#location_url").click(function (event) {

event.preventDefault();

var web_scheme = "<?php echo $baidu_pc_map_url;?>";

var scheme = '';

if(browser.versions.mobile || browser.versions.ios || browser.versions.android ||

browser.versions.iPhone || browser.versions.iPad){

console.log('mobile');

if (browser.versions.ios || browser.versions.iPhone || browser.versions.iPad) {

scheme = "<?php echo $ios_url;?>";

}else if (browser.versions.android) {

scheme = "<?php echo $android_url;?>";

}

}else{

scheme = "<?php echo $baidu_pc_map_url;?>";

console.log('pc',scheme);

}

// 輪詢判斷能否喚起,如果不能喚起 則使用網(wǎng)頁版

window.location.href = scheme;

var startTime = Date.now();

var count = 0;

var endTime = 0;

var t = setInterval(function () {

count += 1;

endTime = Date.now() - startTime;

if (endTime > 800) {

clearInterval(t);

}

if (count < 30) return;

if (!(document.hidden || document.webkitHidden)) {

window.location.href = web_scheme;

}

}, 20);

})

然后就可以喚起應(yīng)用并顯示標(biāo)注了地圖上的點(diǎn)。

Reference

總結(jié)

以上是生活随笔為你收集整理的html5怎样实现信息抓取,HTML5获取定位简单方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线观看的av网址 | 91精彩视频在线观看 | 看毛片的网站 | 香蕉久久精品日日躁夜夜躁 | 理论片在线观看视频 | 荫蒂被男人添免费视频 | 黄色av毛片| 亚洲欧美自拍一区 | 双性懵懂美人被强制调教 | 中文字幕av无码一区二区三区 | www日韩视频| 亚洲一区二区高清视频 | 久久久精品视频网站 | 国产在线国偷精品免费看 | 国产伦精品一区二区三区在线 | caopeng视频 | 国产精品66 | 性猛交xxxx乱大交3 | av在线二区 | av在线入口| 日本少妇b | 天天干天天色综合 | 亚洲第一黄| 伦理亚洲 | 精品91久久久 | 玖玖五月 | jizz日本少妇 | 操干视频| 影音先锋中文字幕一区二区 | 国产午夜大地久久 | 国产片在线播放 | 欧美丰满bbw | 午夜在线播放 | 日韩成人中文字幕 | 午夜www| 色欲久久久天天天综合网 | 天天想你在线观看完整版电影高清 | 天堂аⅴ在线最新版在线 | 好吊妞视频在线 | 日日精品| 成人一区二区在线观看 | bl动漫在线观看 | 黄色免费一级片 | 潘金莲激情呻吟欲求不满视频 | av夜夜| www..com国产| 国产大片b站 | 国产欧美久久久久久 | 男人猛进女人爽的大叫 | 国产成人精品一区二三区四区五区 | 91麻豆精品久久久久蜜臀 | 伊人久久香 | 亚洲国产91| 无码人妻精品一区二区三应用大全 | 国产视频九色蝌蚪 | 欧美激情一二三 | 日韩伦理在线视频 | 1024国产视频 | 亚洲理伦 | 青青色在线视频 | 欧美一区二区三区成人精品 | 一本一道人人妻人人妻αv 九一在线视频 | 一区二区三区在线免费 | 久久精品成人一区二区三区蜜臀 | 亚洲国产高清在线 | 国产91嫩草 | 成人精品网址 | 免费一级a毛片夜夜看 | 波多野结衣av在线播放 | 国产欧美一区二区三区在线 | 日本精品在线看 | 国产精品免费看久久久无码 | 日日骚影院 | 国产一区精品无码 | 日韩高清免费观看 | 一级欧美一级日韩 | 二区视频在线观看 | 免费一区二区三区四区 | 女女互磨互喷水高潮les呻吟 | 亚洲最新在线 | 天堂国产在线 | 免费污视频 | 蜜桃av影院 | 不卡av一区二区 | 天天操狠狠干 | 日本一区二区三区久久久久 | 久久久久一区二区三区四区 | 国产女主播视频 | 国产三区四区视频 | 日剧再来一次第十集 | 亚洲精品6| 国产精选网站 | 日本韩国在线播放 | 久操这里只有精品 | h片在线观看视频 | 欧美丝袜脚交 | 色爱综合网| av黄色影院 | 男女无遮挡做爰猛烈视频 |