ฉันพยายามจะตรวจหาผู้ใช้กำลังหลอกใช้หน้าต่าง 11 ในการรับใช้ที่ถูกต้อง binaries ตอนที่พวกเขาทำการคลิกดาวน์โหลดกระดุม ฉันเจอไมโครซอฟเป็นข้อแนะนำสำหรับวิธีที่จะทำมัน ที่นี่. พวกเขาแนะนำให้ใช้ navigator.userAgentData.getHighEntropyValues
ฟังก์ชันที่จะได้เป็นสัญญากับบรรจุในแพลตฟอร์มรุ่น นี่คือรหัสพวกเขาแนะนำ:
navigator.userAgentData.getHighEntropyValues(["platformVersion"])
.then(ua => {
if (navigator.userAgentData.platform === "Windows") {
const majorPlatformVersion = parseInt(ua.platformVersion.split('.')[0]);
if (majorPlatformVersion >= 13) {
console.log("Windows 11 or later");
}
else if (majorPlatformVersion > 0) {
console.log("Windows 10");
}
else {
console.log("Before Windows 10");
}
}
else {
console.log("Not running on Windows");
}
});
ปัญหาของฉันนั่นฟังก์ชันนี้คือ asynchronous และจะได้ค่าเป็นสัญญาว่าแทนที่จะคืนค่า. ฉันไม่อยากจะต้องแปลงทั้งหมดของรหัสฉันใช้เพื่อการวิเคราะห์ของผู้ใช้สำหรับเจ้าหน้าที่ทุกแพลตฟอร์มในการ async ฟังก์ชัน.
ตอนแรกฉันคิดว่าฉันคงต้องใช้รองแทนที่จะขอใช้สัญญาอย่างนี้:
let ua = await navigator.userAgentData.getHighEntropyValues(["platformVersion"])
อย่างไรก็ตามนี่มันหมายความว่านั่นผมคงต้องทำให้ฟังก์ชันที่บรรจุมั async. และเพราะแบบนี้เหมือนกันรหัสต้องการที่จะทำงานแก่ browsers ที่ไม่สนับสนุน async และที่นั่นทำฉันไม่สามารถทำอย่างนั้น
มันมีทางที่จะระบุสิ่งที่ผิดปกติถ้าผู้ใช้กำลังหลอกใช้หน้าต่าง 11 คนนี้โดยไม่มีรูปแบบ api? หรือใช้รูปแบบ api แต่ในทางนั้นไม่ได้ต้องการ async?