ตรวจจับหน้าต่าง 11 ผ่านทางจาวาสคริปต์

0

คำถาม

ฉันพยายามจะตรวจหาผู้ใช้กำลังหลอกใช้หน้าต่าง 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?

ecmascript-6 javascript windows-11
2021-11-23 15:35:58
1

คำตอบที่ดีที่สุด

4

ปัญหาของฉันนั่นฟังก์ชันนี้ใช้ es6 และจะได้ค่าเป็นสัญญาว่าแทนที่จะคืนค่า.

คนเดียว"ES6"(ES2015)นั้นคือลูกธนูฟังก์ชัน. คุณสามารถใช้เป็นดั้งเดิมฟังก์ชันถ้าคุณไม่อยากใช้ลูกธนูฟังก์ชัน. สัญญาอย่างโดยแพลตฟอร์มไม่ใช่ภาษาด้วย

ฉันไม่อยากจะต้องแปลงทั้งหมดของรหัสฉันใช้เพื่อการวิเคราะห์ของผู้ใช้สำหรับเจ้าหน้าที่ทุกแพลตฟอร์มในต้องการ async ฟังก์ชัน.

คุณไม่จำเป็นต้องทำแบบนี้คุณสามารถทำอะไรรหัสคุณได้แสดงมันโดยใช้ .then วิธีการ. ใช่มันจะเป็น asynchronous(สู entropy ข้อมูล เดียว ที่มีอยู่ asynchronously เพราะมันอาจจะต้องถามผู้ใช้สำหรับอนุญาต)แต่มันก็ยังคงทำงานอยู่ browsers ที่ไม่สนับสนุน async ฟังก์ชัน(เตรียมไว้ให้แน่นอนพวกเขาสนับสนุน getHighEntropyValues).

ไม่อย่างนั้นคุณจะต้องถอยหลังในการวิเคราะห์ navigator.userAgent และนั่นคือ notoriously นเชื่อไม่ได้ คุณจะต้องการมันยังไงสำหรับเจ้าหน้าที่ที่ไม่สนับสนุน getHighEntropyValues หรือผู้ใช้ที่ปฏิเสธขออนุญาตดังนั้นคุณสามารถทำอย่างที่ดีที่สุดของคุณว่าสำหรับหย่อนลง มั่นใจว่าจะให้ลอง(หรือคล้ายกัน)ดังนั้นผู้ใช้สามารถเป็น)ที่ถูกต้องเป็นเดาไม่ถูกต้องและ B)ดาวน์โหลดสำหรับใช้หลังจากนั้นอื่นบนแทนนัน

2021-11-23 15:45:54

ขอบคุณสำหรับคำตอบ คุณพูดถูกที่ลูกศรกฟังก์ชันเป็น es6 นไม่ใช่ปัญหาแล้วได้อย่างง่ายดายการใช้รูปแบบมรดกตกทอดฟังก์ชัน. ฉันเดาว่าคงเป็นปัญหาที่ฉันกำลังพยายามที่อยู่นั่นฟังก์ชันเป็น async(ไม่ว่างโดยเรียกกลับหรือรอคำสั่ง)อยู่ในสถานที่ที่ฉันอยากจะใช้ข้อมูลนั้น synchronously(ดังนั้นฉันไม่ต้องการจะแทนที่ทั้งหมดของการจัดการรหัสทุกแพลตฟอร์ม).
DHamrick

@DHamrick ที่ limitation นั่นคือรูปแบบ api คือ asynchronous ดังนั้นมันไม่สามารถถูกใช้ synchronously.
evolutionxbox

@evolutionxbox ยุติธรรมมามากพอแล้ว! มีอีกรูปแบบ api นใจความเป้าหมายเดียวกัน? คิดออกถ้าผู้ใช้กำลังหลอกใช้หน้าต่าง 11?
DHamrick

@DHamrick ไม่ฉันไม่คิดว่ามีนะ stackoverflow.com/questions/9514179/... ส่วนใหญ่คำตอบเหมือนจะใช้มัน
evolutionxbox

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่