国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微信小程序內嵌webView訪問H5界面,在H5界面獲取定位

這篇具有很好參考價值的文章主要介紹了微信小程序內嵌webView訪問H5界面,在H5界面獲取定位。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

以下為uniapp代碼?。?!

第一步:

微信小程序webview組件路徑寫花生殼映射的https://***域名。

webView頁面



<template>
	<view>
		<web-view :src="wvUrl"></web-view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				wvUrl: `https://******/h5/index/#/pages/login/login?platformToken=123456`,
			}
		},
		methods: {}
	}
</script>

<style>
</style>

第二步:

?花生殼配置映射,獲取域名。
花生殼動態(tài)域名解析服務-貝銳官網|花生殼官網|DNS內網穿透|域名注冊|向日葵遠程控制|遠程桌面|蒲公英路由器-貝銳官網https://www.oray.com/

微信小程序桌面查看webview路徑,vue.js,前端,xss,npm,前端框架

微信小程序桌面查看webview路徑,vue.js,前端,xss,npm,前端框架?

第三步:

uniapp獲取定位。(過程全前端實現(xiàn)無后端)

????????3.1? ? 下載所需文件(npm install crypto-js為了SHA1加密,npm install weixin-js-sdk為了使用微信的api)
? ? ? ? 3.2? ??manifest.json配置

????????重要:uniapp H5端口不能使用默認80(自己踩的坑)

manifest.json



/* 小程序特有相關 */
	"mp-weixin": {
		"appid": "",
		"setting": {
			"urlCheck": false
		},
		"usingComponents": true,
		"permission": {
			"scope.userLocation": {
				"desc": "您的位置信息將用于小程序位置接口的效果展示"
			}
		},
		// 微信小程序使用位置相關api需要在此處注冊
		"requiredPrivateInfos": ["getLocation"]
	},

"h5": {
		"devServer": {
			"port": 8081,
            // 此處代理是為了前端獲取access_token、jsapi_ticket,如果是后端獲取就不必寫了
			"disableHostCheck": true,
			"proxy": {
				"/api": {
					"target": "https://api.weixin.qq.com",
					"changeOrigin": true,
					"pathRewrite": {
						"^/api": "" 
					}
				}
			}
		}
	}
????????3.3? ? 獲取access_token、jsapi_ticket、簽名,配置。(配置一次即可,其他頁面只需要調用定位)
App.vue



<script>
	import wx from 'weixin-js-sdk';
	import {
		appid,
		secret
	} from "@/request/secret_appid.js";
	import {
		apiGetAccessToken,
		apiGetJsapi_ticket,
		getSignature
	} from '@/request/locationApi.js';
	export default {
		onLaunch: function() {
			let {
				accessToken,
				dateTime
			} = uni.getStorageSync("access_token");
			let {
				jsapiTicket
			} = uni.getStorageSync("jsapi_ticket");
			let chaTime = new Date().getTime() - dateTime;
			let h_2 = 2 * 60 * 60 * 1000; // 2*60*60*1000	2小時毫秒值
			if (!uni.getStorageSync("access_token") || chaTime >= h_2) { // 超過2小時需要重新獲取accessToken
				console.log("重新請求token");
				this.gettoken();
			} else {
				console.log("直接走配置");
				let result = getSignature(jsapiTicket); // 傳入ticket獲得timestamp,nonceStr,signature
				this.configWx(result); // 初始化配置
			}
		},
		onShow: function() {},
		onHide: function() {},
		methods: {
			// 獲取token
			gettoken() {
				apiGetAccessToken(appid, secret).then(res => {
					// 需要緩存token
					if (!res.data.errcode) {
						let access_token = {
							accessToken: res.data.access_token,
							dateTime: new Date().getTime(),
						}
						uni.setStorageSync("access_token", access_token);
						this.getJsapi_ticket(res.data.access_token); // 獲取jsapi_ticket
					} else {
						uni.showToast({
							title: `獲取accessToken失敗,errcode:${res.data.errcode}`,
							icon: "none"
						})
					}
				})
			},
			// 獲取jsapi_ticket
			getJsapi_ticket(accessToken) {
				apiGetJsapi_ticket(accessToken).then(res => {
					if (res.data.errcode == 0) {
						let jsapi_ticket = {
							jsapiTicket: res.data.ticket
						}
						uni.setStorageSync("jsapi_ticket", jsapi_ticket);
						let result = getSignature(res.data.ticket); // 簽名獲取timestamp,nonceStr,signature
						this.configWx(result); // 初始化配置
					} else {
						uni.showToast({
							title: `獲取jsapi_ticket失敗,errcode:${res.data.errcode}`,
							icon: "none"
						})
					}
				})
			},
			// 初始化配置
			configWx(result) {
				wx.config({
					debug: false, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會通過log打出,僅在pc端時才會打印。
					appId: appid, // 必填,公眾號的唯一標識
					timestamp: result.timestamp, // 必填,生成簽名的時間戳
					nonceStr: result.noncestr, // 必填,生成簽名的隨機串
					signature: result.signature, // 必填,簽名
					jsApiList: ["getLocation"] // 必填,需要使用的JS接口列表
				});
				wx.error((err) => {
					uni.showToast({
						title: "配置失敗",
						icon: "none"
					})
				})
			},
		}
	}
</script>

<style>
</style>
????????3.4? ? 獲取定位方法
weixin-js-sdk_location.js



import wx from 'weixin-js-sdk';
// 坐標轉化的方法
import {
	gcj02tobd09
} from '@/utils/coordinateTransform.js';


// 獲取地理坐標
export function getByLocation() {
	return new Promise((resolve, reject) => {
		wx.ready(() => {
			wx.getLocation({
				type: 'gcj02', // 默認為wgs84(gcj02)的gps坐標
				success: function(res) {
					let result = gcj02tobd09(res.longitude, res.latitude);
					let lngLat = {
						code: 200,
						lng: result[0],
						lat: result[1]
					};
					resolve(lngLat)
				},
				error: function(err) {
					reject(err)
				},
			})
		})
	})
}
????????3.5? ? 使用
<template>
	<view></view>
</template>

<script>
	import {
		getByLocation
	} from '@/utils/weixin-js-sdk_location.js';

	export default {
		data() {
			return {}
		},
		onShow() {
			// 通過公眾號sdk獲取位置
			getByLocation().then(res => {
				if (res.code == 200) {
					alert(JSON.stringify(res))
				} else {
					uni.showToast({
						title: "獲取經緯度失敗",
						icon: "none"
					})
				}
			})
		},
		methods: {}
	}
</script>

<style>
</style>

第四步:所需文件

? ? ? ? 4.1? ? secret_appid.js:存儲appid及secret
// 測試公眾號
let appid = "";
let secret = "";
export {
	appid,
	secret
}
? ? ? ? 4.2? ??locationApi.js:獲取accessToken、jsapi_ticket、簽名等方法
import CryptoJS from "crypto-js";

/* 
請求函數(shù)
*/
function request({
	url,
	method,
	params
}) {
	uni.showLoading({
		title: "加載中..."
	});

	return new Promise((resolve, reject) => {
		uni.request({
			url: url,
			method: method || 'GET',
			data: params || {},
			success(res) {
				resolve(res);
			},
			fail(err) {
				reject(err);
			},
			complete() {
				uni.hideLoading();
			}
		});
	});
}

/* 第一步:獲取accessToken
access_token的有效期目前為2個小時,需定時刷新
傳參:
	appid:開發(fā)者ID(AppID)
	secret:開發(fā)者密碼(AppSecret)
*/
// https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${secret}
function apiGetAccessToken(appid, secret) {
	return request({
		url: `/api/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${secret}`,
	})
}

/* 第二步:獲取jsapi_ticket
jsapi_ticket(有效期7200秒,開發(fā)者必須在自己的服務全局緩存jsapi_ticket)用于權限驗證的簽名
傳參:
	access_token
*/
function apiGetJsapi_ticket(access_token) {
	return request({
		url: `/api/cgi-bin/ticket/getticket?access_token=${access_token}&type=jsapi`,
	})
}

// 第三步:獲取signature
function getSignature(ticket) {
	let noncestr = getRandomString(); // 16位隨機字符串
	let jsapi_ticket = ticket; // 此處必須得到有效的jsapi_ticket
	let timestamp = getTimestamp(); // 時間戳
	let url = getConfigUrl(); // URL

	let obj = {
		noncestr,
		jsapi_ticket,
		timestamp,
		url
	}
	let string1 = sort_ascii(obj);
	let signature = CryptoJS.SHA1(string1).toString();

	let result = {
		noncestr,
		timestamp,
		signature
	}
	return result;
}



/* 
簽名算法所需參數(shù):
	noncestr:隨機字符串,
	jsapi_ticket:有效的,
	timestamp:時間戳,
	url:(當前網頁的URL,不包含#及其后面部分)

對以上四個參數(shù)整理成對象并按ascii碼從小到大排序,排完序在進行sh1加密	得到signature
let result = { noncestr, jsapi_ticket: ticket, timestamp, url: getConfigUrl() };
sort_ascii(result)
*/
// 生成一個隨機的字符串
function getRandomString(len = 16) {
	let chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890';
	let maxPos = chars.length;
	let character = '';

	if (len) {
		for (let i = 0; i < len; i++) {
			character += chars.charAt(Math.floor(Math.random() * maxPos))
		}
	} else {
		for (let i = 0; i < len; i++) {
			character += chars.charAt(Math.floor(Math.random() * maxPos))
		}
	}
	return character;
}
// 獲取時間戳
function getTimestamp() {
	return new Date().getTime();
}
// 獲取url
function getConfigUrl() {
	let u = window.navigator.userAgent;
	let isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios終端
	//安卓需要使用當前URL進行微信API注冊(即當場調用location.href.split('#')[0])
	//iOS需要使用進入頁面的初始URL進行注冊,(即在任何pushstate發(fā)生前,調用location.href.split('#')[0])
	let url = '';
	if (isiOS) {
		url = `${window.localStorage.getItem('_iosWXConfig_') || window.location.href.split('#')[0]}`; //獲取初始化的url相關參數(shù)
	} else {
		url = window.location.href.split('#')[0];
	}
	return url;
}
// 按ascii碼從小到大排序
function sort_ascii(obj) {
	let arr = [];
	let num = 0;
	for (let i in obj) {
		arr[num] = i;
		num++;
	}
	let sortArr = arr.sort();
	let str = ''; //自定義排序字符串
	for (let i in sortArr) {
		str += sortArr[i] + '=' + obj[sortArr[i]] + '&';
	}
	//去除兩側字符串
	let char = '&';
	str = str.replace(new RegExp('^\\' + char + '+|\\' + char + '+$', 'g'), '');

	return str;
}

export {
	apiGetAccessToken,
	apiGetJsapi_ticket,
	getRandomString,
	getTimestamp,
	getConfigUrl,
	sort_ascii,
	getSignature
}
????????4.3? ??weixin-js-sdk_location.js:獲取定位封裝的方法
import wx from 'weixin-js-sdk';
import {
	gcj02tobd09
} from '@/utils/coordinateTransform.js';


// 獲取地理坐標
export function getByLocation() {
	return new Promise((resolve, reject) => {
		wx.ready(() => {
			wx.getLocation({
				type: 'gcj02', // 默認為wgs84(gcj02)的gps坐標
				success: function(res) {
					let result = gcj02tobd09(res.longitude, res.latitude);
					let lngLat = {
						code: 200,
						lng: result[0],
						lat: result[1]
					};
					resolve(lngLat)
				},
				error: function(err) {
					reject(err)
				},
			})
		})
	})
}
? ? ? ? 4.4? ??coordinateTransform.js:坐標轉換方法
// 地圖坐標轉換公共方法

//定義一些常量
const PI = 3.1415926535897932384626;
const a = 6378245.0;
const ee = 0.00669342162296594323;

export function transformlat(lng, lat) {
  var ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
  ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
  ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
  ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
  return ret
}

export function transformlng(lng, lat) {
  var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
  ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
  ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
  ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
  return ret
}

/**
 * 判斷是否在國內,不在國內則不做偏移
 * @param lng
 * @param lat
 * @returns {boolean}
 */
export function out_of_china(lng, lat) {
  return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false);
}

/**
 * WGS84轉GCj02
 * @param lng
 * @param lat
 * @returns {*[]}
 */
export function wgs84togcj02 (lng, lat) {
  if (out_of_china(lng, lat)) {
    return [lng, lat]
  } else {
    var dlat = transformlat(lng - 105.0, lat - 35.0);
    var dlng = transformlng(lng - 105.0, lat - 35.0);
    var radlat = lat / 180.0 * PI;
    var magic = Math.sin(radlat);
    magic = 1 - ee * magic * magic;
    var sqrtmagic = Math.sqrt(magic);
    dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
    dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
    var mglat = lat + dlat;
    var mglng = lng + dlng;
    return [mglng, mglat]
  }
}

/**
 * GCJ02 轉換為 WGS84
 * @param lng
 * @param lat
 * @returns {*[]}
 */
export function gcj02towgs84 (lng, lat) {
  if (out_of_china(lng, lat)) {
    return [lng, lat]
  } else {
    var dlat = transformlat(lng - 105.0, lat - 35.0);
    var dlng = transformlng(lng - 105.0, lat - 35.0);
    var radlat = lat / 180.0 * PI;
    var magic = Math.sin(radlat);
    magic = 1 - ee * magic * magic;
    var sqrtmagic = Math.sqrt(magic);
    dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
    dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
    let mglat = lat + dlat;
    let mglng = lng + dlng;
    return [lng * 2 - mglng, lat * 2 - mglat]
  }
}

/**
 * 百度坐標系 (BD-09) 與 火星坐標系 (GCJ-02)的轉換
 * 即 百度 轉 谷歌、高德
 * @param bd_lon
 * @param bd_lat
 * @returns {*[]}
 */
export function bd09togcj02 (bd_lon, bd_lat) {
  var x_pi = 3.14159265358979324 * 3000.0 / 180.0;
  var x = bd_lon - 0.0065;
  var y = bd_lat - 0.006;
  var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
  var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
  var gg_lng = z * Math.cos(theta);
  var gg_lat = z * Math.sin(theta);
  return [gg_lng, gg_lat]
}

/**
 * 火星坐標系 (GCJ-02) 與百度坐標系 (BD-09) 的轉換
 * 即谷歌、高德 轉 百度
 * @param lng
 * @param lat
 * @returns {*[]}
 */
export function gcj02tobd09 (lng, lat) {
  var x_PI = 3.14159265358979324 * 3000.0 / 180.0;
  var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI);
  var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI);
  var bd_lng = z * Math.cos(theta) + 0.0065;
  var bd_lat = z * Math.sin(theta) + 0.006;
  return [bd_lng, bd_lat]
}

/**
 * WGS84轉BD09
 * @param lng
 * @param lat
 * @returns {*[]}
 */
export function WGS84ToBD09 (lng, lat) {
  let gcj02 = wgs84togcj02(lng, lat);
  return gcj02tobd09(gcj02[0], gcj02[1]);
}

/**
 * BD09轉WGS84
 * @param lng
 * @param lat
 * @returns {*[]}
 */
export function BD09ToWGS84 (lng, lat) {
  let gcj02 = bd09togcj02(lng, lat);
  return gcj02towgs84(gcj02[0], gcj02[1]);
}

第五步:

測試公眾號(開啟獲取位置的權限、js接口安全域名)

微信公眾平臺https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

微信小程序桌面查看webview路徑,vue.js,前端,xss,npm,前端框架

第六步:

vebniew的src域名要和js接口安全域名一致?(不能一個寫花生殼域名一個寫本地ip)文章來源地址http://www.zghlxwxcb.cn/news/detail-828473.html

到了這里,關于微信小程序內嵌webView訪問H5界面,在H5界面獲取定位的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Andorid App 通過webview內嵌h5獲取定位

    Android app中內嵌h5獲取輔助定位一般需要兩步: 第一步在Android的AndroidManifest.xml文件中添加讀寫權限、模糊定位權限、精確定位權限 第二部通過webview開啟輔助定位 1、初始化AMapLocationClient 2、加載webview控件 3、在設置webview屬性之前開啟輔助定位,在設置屬性之后體驗不好 4、設

    2024年02月15日
    瀏覽(91)
  • 微信小程序內嵌H5網頁

    微信小程序內嵌H5網頁

    1.登錄微信公眾平臺,選擇對應的小程序進入(個人類型的小程序暫不支持使用) 2.在小程序后臺左側菜單選擇“開發(fā)”–“開發(fā)管理”–“開發(fā)設置”–“業(yè)務域名”–“添加”–掃碼進入,點擊“下載檢驗文件”下載到電腦本地,提供給小程序開發(fā)運營者進行配置,將文

    2024年02月11日
    瀏覽(101)
  • uniapp 微信小程序 內嵌H5網頁辦法

    uniapp 微信小程序 內嵌H5網頁辦法

    如圖所示 1.新建webView頁面 2.跳轉頁面

    2024年01月20日
    瀏覽(165)
  • 微信小程序內嵌H5頁面實現(xiàn)微信支付

    微信小程序內嵌H5頁面實現(xiàn)微信支付

    背景: 在微信H5頁面已經實現(xiàn)了微信JSAPI的網頁支付,老板要求把整個業(yè)務線快速轉移到微信小程序中,作為懶惰的程序員來說,直接把頁面嵌套到小程序不就行了。說干就干,在小程序中設置好基本信息后,一預覽居然成功了,一切看來是那么順利,可到了系統(tǒng)的支付環(huán)節(jié)

    2024年02月11日
    瀏覽(99)
  • 微信小程序webview(H5頁面)調用微信小程序支付

    1.業(yè)務描述:微信小程序商城入口進入的頁面是商城H5頁面,在H5頁面進行微信支付如何實現(xiàn); 2.微信小程序(webview訪問H5頁面)必須使用微信小程序支付; 如何實現(xiàn)以及實現(xiàn)方式以及支付后頁面返回功能: 商品詳情(h5頁面)--商品確認頁(h5頁面)--收銀臺(h5頁面)(點擊調

    2024年02月11日
    瀏覽(94)
  • 微信小程序與內嵌h5頁面之間的參數(shù)傳遞

    小程序是采用vue+taroui技術棧 h5頁面 所在文件:h5.vue 小程序頁面:wx.vue,這里我用的是taro獲取當前頁面棧,大家可以用wx 這里的this.routerParams==={params:1} 小程序頁面:wx.vue,首先向內嵌h5的webview所在頁面跳轉并攜帶所傳參數(shù)。 webview頁面—/pages/processLink/index。index.vue,由該頁面

    2024年02月15日
    瀏覽(92)
  • 微信小程序內嵌h5頁面,實現(xiàn)動態(tài)設置頂部標題的功能

    一、需求描述 使用HBuilder X作為開發(fā)工具,vue作為開發(fā)語言,開發(fā)微信小程序。微信小程序頁面內嵌h5頁面,即web-view/web-view標簽。通過設置不同url連接地址,設置不同的標題。 二、失敗做法 頁面A嵌入h5頁面,需要給A設置標題。最開始寫法是在lonload頁面內,使用如下語句實現(xiàn)

    2024年02月04日
    瀏覽(150)
  • uniapp webview H5跳轉微信小程序

    uniapp webview H5跳轉微信小程序

    第一步:manifest.json 第二步:index.html 第三步 H5跳轉微信小程序代碼

    2024年02月10日
    瀏覽(94)
  • uniapp實現(xiàn)微信小程序內嵌h5頁面的相互跳轉

    前期準備3個頁面,小程序內2個,h5一個。 小程序內:操作頁pageA,展示容納h5的展示頁PageWebview.vue。 h5:h5頁面pageB,并且有可以訪問的線上url。 【微信小程序pageA-內嵌h5頁面pageB】 1.1 pageA實現(xiàn)點擊跳轉,將pageB的訪問地址url拼接,并進入展示頁PageWebview.vue 1.2 PageWebview.vue頁面用

    2024年02月12日
    瀏覽(95)
  • H5頁面內嵌到微信小程序和APP,做分享操作

    H5頁面內嵌到微信小程序和APP,做分享操作

    最近接到項目新需求,H5項目需要內嵌到微信小程序和APP里,然后將H5頁面分享出去,被分享的人可以點擊消息跳轉到H5頁面。H5頁面不難,難的是要與微信小程序和APP進行交互,因為以前也沒有接觸過,所以這里卡的時間有點長。現(xiàn)分享出來 介紹 這里小編使用的是 uinapp 寫的

    2024年02月06日
    瀏覽(838)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包