You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.3 KiB
97 lines
3.3 KiB
// #ifdef H5
|
|
window.qq = window.qq || {}, qq.maps = qq.maps || {}, window.soso || (window.soso = qq), soso.maps || (soso.maps = qq
|
|
.maps), qq.maps.Geolocation = function() {
|
|
"use strict";
|
|
var e = [],
|
|
t = null,
|
|
o = 0,
|
|
n = "_geoIframe_" + Math.ceil(1e7 * Math.random()),
|
|
i = document.createElement("iframe"),
|
|
r = null,
|
|
s = null,
|
|
a = null,
|
|
c = null,
|
|
u = function(u, l) {
|
|
if (!u) return void alert("请输入key!");
|
|
if (!l) return void alert("请输入referer!");
|
|
var p = document.getElementById(n);
|
|
if (!p) {
|
|
i.setAttribute("id", n), i.setAttribute("allow", "geolocation");
|
|
var g = "https:";
|
|
i.setAttribute("src", g + "//apis.map.qq.com/tools/geolocation?key=" + u + "&referer=" + l), i
|
|
.setAttribute("style", "display: none; width: 100%; height: 30%"), document.body ? document
|
|
.body
|
|
.appendChild(i) : document.write(i.outerHTML);
|
|
var m = this;
|
|
window.addEventListener("message", function(n) {
|
|
var i = n.data;
|
|
if (i && "geolocation" == i.module) {
|
|
if (clearTimeout(c), e.length > 0) {
|
|
var u = e.shift();
|
|
u.sucCb && u.sucCb(i)
|
|
}
|
|
o = 2, m.executeNextGeo(), t && t(i)
|
|
} else {
|
|
s = (new Date).getTime();
|
|
var l = s - r;
|
|
if (l >= a) {
|
|
if (e.length > 0 && "geo" === e[0].type) {
|
|
var u = e.shift(),
|
|
p = {
|
|
type: "fail",
|
|
code: 5,
|
|
message: "The request"
|
|
};
|
|
u.errCb && u.errCb(p)
|
|
}
|
|
clearTimeout(c), o = -1, m.executeNextGeo()
|
|
}
|
|
if (e.length > 0 && "ip" === e[0].type) {
|
|
var u = e.shift();
|
|
u.errCb && u.errCb(p)
|
|
}
|
|
}
|
|
}, !1)
|
|
}
|
|
};
|
|
return u.prototype.executeNextGeo = function() {
|
|
1 !== o && e.length > 0 && (o = 1, e[0].geoprocess())
|
|
}, u.prototype.getLocation = function(t, n, i) {
|
|
if (i && i.timeout) {
|
|
var r = new RegExp("^[0-9]*$");
|
|
if (!r.test(i.timeout)) return void alert("timeout 请输入数字")
|
|
}
|
|
if (e.length > 10) throw new Error("geolocation queue must be lass than 10");
|
|
e.push({
|
|
sucCb: t,
|
|
errCb: n,
|
|
option: i,
|
|
geoprocess: this.getOnceLocation,
|
|
type: "geo"
|
|
}), 1 !== o && (o = 1, this.getOnceLocation())
|
|
}, u.prototype.getOnceLocation = function() {
|
|
var t = e[0] && e[0].option;
|
|
r = (new Date).getTime(), a = t && t.timeout ? +t.timeout : 1e4, clearTimeout(c), c = setTimeout(
|
|
function() {
|
|
if (e.length > 0) {
|
|
var t = e.shift();
|
|
t.errCb && t.errCb()
|
|
}
|
|
}, a), document.getElementById(n).contentWindow.postMessage("getLocation", "*")
|
|
}, u.prototype.getIpLocation = function(t, n) {
|
|
if (e.length > 10) throw new Error("geolocation queue mast be lass than 10");
|
|
e.push({
|
|
sucCb: t,
|
|
errCb: n,
|
|
geoprocess: this.getOnceIpLocation,
|
|
type: "ip"
|
|
}), 1 !== o && (o = 1, this.getOnceIpLocation())
|
|
}, u.prototype.getOnceIpLocation = function() {
|
|
document.getElementById(n).contentWindow.postMessage("getLocation.robust", "*")
|
|
}, u.prototype.watchPosition = function(e) {
|
|
t = e, document.getElementById(n).contentWindow.postMessage("watchPosition", "*")
|
|
}, u.prototype.clearWatch = function() {
|
|
t = null, document.getElementById(n).contentWindow.postMessage("clearWatch", "*")
|
|
}, u
|
|
}();
|
|
// #endif
|
|
|