"use script" // 开发环境建议开启严格模式 const url = "https://api.waqi.info/mapq/bounds/?bounds={RECTANGLE}&inc=placeholders&k={KEY}&_={DATA}" const table = [ { level: "一级(优)", influence: "空气质量令人满意,基本无空气污染", suggestion: "各类人群可正常活动" }, { level: "二级(良)", influence: "空气质量可接受,但某些污染物可能对极少数异常敏感人群健康有较弱影响", suggestion: "心脏病和肺病患者症状显著加剧,运动耐受力降低,健康人群普遍出现症状" }, { level: "三级(轻度污染)", influence: "易感人群症状有轻度加剧,健康人群出现刺激症状", suggestion: "儿童、老年人及心脏病、呼吸系统疾病患者应减少长时间、高强度的户外锻炼" }, { level: "四级(中度污染)", influence: "易感人群症状有轻度加剧,健康人群出现刺激症状", suggestion: "儿童、老年人及心脏病、呼吸系统疾病患者避免长时间、高强度的户外锻炼,一般人群适量减少户外运动" }, { level: "五级(重度污染)", influence: "心脏病和肺病患者症状显著加剧,运动耐受力降低,健康人群普遍出现症状", suggestion: "儿童、老年人及心脏病、肺病患者应停留在室内,停止户外运动,一般人群减少户外运动" }, { level: "六级(严重污染)", influence: "心脏病和肺病患者症状显著加剧,运动耐受力降低,健康人群普遍出现症状", suggestion: "儿童、老年人和病人应停留在室内,避免体力消耗,一般人群避免户外活动" } ] let xmlHttpRequest const nWidth = 500 let currTime onmessage = function (e) { const bounds = e.data.bounds currTime = new Date().getTime() const strKey = jskey() const nowUrl = url.replace("{RECTANGLE}", bounds).replace("{KEY}", strKey).replace("{DATA}", currTime) xmlHttpRequest = new XMLHttpRequest() // 2.设置回调函数 xmlHttpRequest.onreadystatechange = callback // 3.初始化XMLHttpRequest组建 xmlHttpRequest.open("POST", nowUrl, true) // 4.发送请求 xmlHttpRequest.send() } function callback() { if (xmlHttpRequest.readyState === 4 && xmlHttpRequest.status === 200) { const entityTable = [] /// ///////////////////////////////////////////////// const currentData = JSON.parse(xmlHttpRequest.responseText) for (let i = currentData.length - 1; i >= 0; i--) { const item = currentData[i] let aqi = parseInt(item.aqi) if (!isNumber(aqi)) { continue } let level = 0 if (aqi > nWidth) { level = 5 aqi = nWidth - 1 } else { if (aqi > 300) { level = 5 } else if (aqi > 200) { level = 4 } else if (aqi > 150) { level = 3 } else if (aqi > 100) { level = 2 } else if (aqi > 50) { level = 1 } } const newItem = { ...item, aqi: aqi, level: table[level].level, influence: table[level].influence, suggestion: table[level].suggestion } entityTable.push(newItem) } /// /////////////////////////////////////////////////// // self代表子线程自身 self.postMessage({ currTime: currTime, entityTable: entityTable }) self.close() } else if (xmlHttpRequest.readyState === 4 && xmlHttpRequest.status === 0) { self.postMessage({ currTime: currTime, entityTable: [] }) self.close() } } function isNumber(obj) { return typeof obj === "number" && !isNaN(obj) } function jskey() { return (function () { let u = "" decodeURIComponent("%603Z3F%7BWS%3A3BSBdIRlJTySXYnmecFR%2CF%7BeSGHhkMh%3E%3E") .split("") .forEach(function (c) { u += String.fromCharCode(c.charCodeAt(0) - 1) }) return u })() }