ไธไธชๅบไบ Chrome Manifest V3 ็ๆบๆ งๆ ๅนณๅฐ่ชๅจๅท้ขๆต่งๅจๆฉๅฑ๏ผ้็จๆจกๅๅๆถๆ่ฎพ่ฎก๏ผๆฏๆๆบ่ฝ็ญ้ขใ้้ขๆไธพใ้ขๅบ็ฎก็็ญๅ่ฝใ
- ่ชๅจ็ญ้ข๏ผๆบ่ฝ่ฏๅซ้ขๅ๏ผๅ้/ๅค้/ๅคๆญ๏ผ๏ผ่ชๅจๅกซๅ็ญๆก
- ้ขๅบ่ฎฐๅฟ๏ผๅบไบ
examId่ชๅจไฟๅญๅๅ ่ฝฝๅๅฒ็ญๆก - ้้ขๆไธพ๏ผๅค้้ข็ญ้ๆถ่ชๅจ่ฟ่ก็ปๅๆไธพ๏ผn้โn-1้โ...โ2้๏ผ
- ่ฟๅบฆ่ฟฝ่ธช๏ผๅฎๆถๆพ็คบ็ญ้ข่ฟๅบฆๅๆไธพ็ถๆ
- ๅค้กต้ขๆฏๆ๏ผ
mastery้กต้ข๏ผ่ชๅจๆฅๆพๆชๅฎๆ้ข็ฎpointOfMastery้กต้ข๏ผๆฃๆตๅฎๆๅบฆ๏ผ่ชๅจ่ฟๅexam้กต้ข๏ผๅๆฐๆๅไธ่ชๅจ็ญ้ขexamAnalysis้กต้ข๏ผ็ญๆกๆดๆฐไธ้้ขๅค็
- ๆบ่ฝๅฏผ่ช๏ผ100% ๅฎๆๅ่ชๅจ่ฟๅ๏ผ็ปง็ปญไธไธ้ข็ฎ
- ๆญ็บฟ้่ฟ๏ผ้กต้ขๅทๆฐๅ่ชๅจๆขๅค็ถๆ
- ๆฌๆตฎๆงๅถ้ขๆฟ๏ผๅฏๆๆฝ็ๆตฎๅจ็ชๅฃ๏ผๅฎๆถๆพ็คบ็ถๆ
- ไธ้ฎๆไฝ๏ผๅฏๅจ/ๅๆญขใๆธ ็ฉบ้ขๅบใๆฅ็ๅฝๅ็ถๆ
- ้็ฅ็ณป็ป๏ผๅฝฉ่ฒ้็ฅๆ็คบ๏ผๆๅ/่ญฆๅ/้่ฏฏ๏ผ
- ๆทฑ่ฒๆจกๅผ้้ ๏ผๆฏๆๆบๆ งๆ ๅนณๅฐๆทฑ่ฒๆจกๅผ
ZhiHuiShu/
โโโ manifest.json # Manifest V3 ้
็ฝฎๆไปถ
โโโ background/ # ๅๅฐๆๅก
โ โโโ background.js # Service Worker๏ผ้ขๅบๅญๅจ็ฎก็
โโโ content/ # ๅ
ๅฎน่ๆฌ๏ผๆจกๅๅๆถๆ๏ผ
โ โโโ content-main.js # ไธปๅ
ฅๅฃ๏ผ้กต้ข็ๅฌไธ่ทฏ็ฑ
โ โโโ utils.js # ๅทฅๅ
ทๅฝๆฐ๏ผ้กต้ข็ฑปๅๅคๆญ็ญ๏ผ
โ โโโ interceptor.js # ็ฝ็ป่ฏทๆฑๆฆๆชๅจ
โ โโโ page-interceptor.js # ้กต้ขๆฐๆฎๆฆๆชไธ่งฃๆ
โ โโโ page-handlers.js # ้กต้ขๅค็ๅจ๏ผmastery/pointOfMastery๏ผ
โ โโโ auto-answer.js # ่ชๅจ็ญ้ขๆ ธๅฟ้ป่พ
โ โโโ ui.js # ็จๆท็้ข็ปไปถ
โโโ popup/ # ๅผนๅบ้กต้ข
โ โโโ popup.html
โ โโโ popup.css
โ โโโ popup.js
โโโ icons/ # ๅพๆ ่ตๆบ
โโโ data/ # ๆฐๆฎๅญๅจ็ฎๅฝ
-
ไธ่ฝฝๆๅ ้ๆฌ้กน็ฎ
git clone https://github.com/zjuatri/ZhiHuiShu.git
-
ๆๅผ Chrome/Edge ๆต่งๅจ
-
่ฎฟ้ฎๆฉๅฑ็ฎก็้กต้ข๏ผ
- Chrome:
chrome://extensions/ - Edge:
edge://extensions/
- Chrome:
-
ๅผๅฏๅณไธ่ง็ "ๅผๅ่ ๆจกๅผ"
-
็นๅป "ๅ ่ฝฝๅทฒ่งฃๅ็ๆฉๅฑ็จๅบ"
-
้ๆฉ้กน็ฎๆ น็ฎๅฝ๏ผๅ ๅซ
manifest.json็ๆไปถๅคน๏ผ
-
่ฎฟ้ฎๆบๆ งๆ ๅนณๅฐ
- ๆฏๆๅๅ๏ผ
studywisdomh5.zhihuishu.comfusioncourseh5.zhihuishu.com
- ๆฏๆๅๅ๏ผ
-
ๅฏๅจ่ชๅจๅท้ข
- ๅจโๆๆกๅบฆโ้กต้ข็นๅปๆฌๆตฎ็ชไธญ็ "๐ ๅผๅง่ชๅจๅท้ข" ๆ้ฎ
- ๅฆๆๆชๆพ็คบ่ฏฅๆ้ฎๅทๆฐ้กต้ขๅณๅฏ
- ๅผๅฏ่ฏฅๆไปถ่ฟๅ ฅๆบๆ งๆ ่ฏพ็จ้กต้ขๅฏ่ฝ่งฆๅ่ญฆๅ๏ผๅ ณ้ญๆไปถ๏ผๆๅผโๆๆกๅบฆโ้กต้ข๏ผๅทๆฐๅณๅฏๆญฃๅธธไฝฟ็จ
-
ๆฅ็่ฟๅบฆ
- ๆฌๆตฎ็ชๅฎๆถๆพ็คบๅฝๅ็ถๆ๏ผ
- ็ฉบ้ฒไธญ / ่ชๅจ็ญ้ขไธญ
- ๅฝๅ็ญๆกใๆไธพ่ฟๅบฆ
- ็ญ้ขๅบๅท
- ๆฌๆตฎ็ชๅฎๆถๆพ็คบๅฝๅ็ถๆ๏ผ
-
ๆธ ็ฉบ้ขๅบ
- ็นๅป "๐๏ธ ๆธ ็ฉบๆๆ้ขๅบ" ๆ้ฎ
- ็กฎ่ฎคๅๆธ ้คๆๆๅทฒไฟๅญ็็ญๆกๆฐๆฎ
- Manifest V3๏ผChrome ๆฉๅฑๆๆฐๆ ๅ
- Vanilla JavaScript๏ผๆ ๆกๆถไพ่ต๏ผ้ซๆง่ฝ
- Chrome Storage API๏ผๆไน ๅ้ขๅบๆฐๆฎ
- Fetch/XHR Interception๏ผ็ฝ็ป่ฏทๆฑๆฆๆช
- ้กต้ข็ฑปๅ่ฏๅซไธ่ทฏ็ฑ
- URL ๅๅ็ๅฌ๏ผMutationObserver + popstate๏ผ
- ๆจกๅ็ๅฝๅจๆ็ฎก็
isPageType(): ้กต้ข็ฑปๅๅคๆญextractExamParams(): ่่ฏๅๆฐๆๅshowNotification(): ้็ฅๆพ็คบ
- Fetch/XHR ่ฏทๆฑๆฆๆช
- ้ข็ฎๆฐๆฎๆๅ๏ผ
getQuestionsAPI๏ผ - ็ญๆกๆฐๆฎๆๅ๏ผ
getUserAnswersAPI๏ผ
findAndClickNextUncompleted(): ๆฅๆพๆชๅฎๆ้ข็ฎ๏ผmastery๏ผhandlePointOfMasteryPage(): ๅค็่ฟๅบฆๆฃๆต๏ผpointOfMastery๏ผgetNextEnumerationAnswer(): ้้ขๆไธพ็ฎๆณ
startAutoAnswer(): ่ชๅจ็ญ้ขๆต็จๆงๅถfillAnswerOnly(): ็ญๆกๅกซๅ๏ผๆฏๆๅ้/ๅค้/ๅคๆญ๏ผ- ๅผๆญฅ้กบๅบ็นๅป๏ผ้ฒๆญขไบไปถๅฒ็ช๏ผ
- ็ญๆก้ช่ฏไธ้่ฏฏๅค็
- ๆฌๆตฎ็ชๅๅปบไธๆๆฝ
- ็ถๆๆพ็คบๆดๆฐ
- ๆ้ฎไบไปถ็ปๅฎ
- ้ขๅบๆฐๆฎๅญๅจ๏ผๅบไบ
examId๏ผ - ่ทจ้กต้ข็ถๆๅๆญฅ
- ๆถๆฏ้ไฟกๅค็
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. mastery ้กต้ข โ
โ - ๆฅๆพๆชๅฎๆ้ข็ฎ๏ผcustom-content div๏ผ โ
โ - ็นๅปๆ้ฎ่ฟๅ
ฅ pointOfMastery โ
โโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. pointOfMastery ้กต้ข โ
โ - ๆฃๆต่ฟๅบฆ๏ผcharts-label-rate๏ผ โ
โ - 100%: ็นๅป่ฟๅ mastery๏ผ็ปง็ปญไธไธ้ข โ
โ - <100%: ็นๅปๆฅ็ๅๆๆ้ฎ่ฟๅ
ฅ examAnalysis โ
โโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 3. examAnalysis ้กต้ข โ
โ - ๆฆๆช getUserAnswers API ่ทๅ็ญๆกๆฐๆฎ โ
โ - ๆดๆฐ้ขๅบ๏ผๆญฃ็กฎ็ญๆกๆ้้ขๆไธพ๏ผ โ
โ - ๅทๆฐ้กต้ข้ๆฐ่ฟๅ
ฅ exam โ
โโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 4. exam ้กต้ข โ
โ - ๆฆๆช getQuestions API ่ทๅ้ข็ฎ โ
โ - ๆๅ examId ไป้ขๅบๅ ่ฝฝ็ญๆก โ
โ - ่ชๅจๅกซๅ็ญๆกๅนถๆไบค โ
โ - ็ญๅพ
่ทณ่ฝฌๅฐ examAnalysis โ
โโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
ๅพช็ฏ็ด่ณ 100%
ๅค้้ข็ญ้ๆถ่ชๅจ่ฟ่ก็ปๅๆไธพ๏ผ
// ็คบไพ๏ผ5 ไธช้้กน็ๅค้้ข
ๅๅง็ญๆก: [1, 2, 3, 4, 5] // ๅ
จ้
็ฌฌ 1 ๆฌก: [1, 2, 3, 4] // C(5,4) = 5 ็ง็ปๅ
็ฌฌ 2 ๆฌก: [1, 2, 3] // C(5,3) = 10 ็ง็ปๅ
็ฌฌ 3 ๆฌก: [1, 2] // C(5,2) = 10 ็ง็ปๅ
...
็ดๅฐๆพๅฐๆญฃ็กฎ็ญๆก- ๆ ้ขๆ ๏ผๆพ็คบ "ATRI ๅท้ขๅฉๆ" + ๅฝๅ็ถๆๆ็คบ็ฏ
- ็ถๆๆพ็คบ๏ผ
- ๐ด ็ฉบ้ฒไธญ / ๐ข ่ชๅจ็ญ้ขไธญ
- ๅฝๅ็ญๆกๆฐ็ป
- ็ญ้ขๅบๅท
- ๆไฝๆ้ฎ๏ผ
- ๐ ๅผๅง่ชๅจๅท้ข๏ผ็ปฟ่ฒๆธๅ๏ผ
- โธ๏ธ ๅๆญข่ชๅจๅท้ข๏ผๆฉ่ฒๆธๅ๏ผ
- ๐๏ธ ๆธ ็ฉบๆๆ้ขๅบ๏ผ็บข่ฒๆธๅ๏ผ
- ๆๅ้็ฅ๏ผ็ปฟ่ฒ๏ผ๏ผ็ญ้ขๅฎๆใ้ขๅบๆธ ็ฉบ็ญ
- ่ญฆๅ้็ฅ๏ผๆฉ่ฒ๏ผ๏ผ้กต้ขๆฃๆตใ็ถๆๆ้็ญ
- ้่ฏฏ้็ฅ๏ผ็บข่ฒ๏ผ๏ผๅ ็ด ๆชๆพๅฐใๆไฝๅคฑ่ดฅ็ญ
{
questionId: "123456", // ้ข็ฎID
questionType: 1 | 2 | 14, // 1=ๅ้, 2=ๅค้, 14=ๅคๆญ
optionList: [...], // ้้กนๅ่กจ
// ...
}{
examId: "exam_123", // ่่ฏID๏ผ้ขๅบ้ฎ๏ผ
answerList: [
{
questionId: "123456",
answer: [1, 2, 3] // ็ปไธๆฐ็ปๆ ผๅผ
}
]
}ๆๆๅ ณ้ฎๆไฝ้ฝๆ่ฏฆ็ปๆฅๅฟ่พๅบ๏ผF12 ๆงๅถๅฐๆฅ็๏ผ๏ผ
๐ๆฅๆพๆไฝโๆๅๆไฝโๅคฑ่ดฅ/้่ฏฏ๐ๆฐๆฎ็ป่ฎก๐ๆต็จ็ถๆโ ๏ธ่ญฆๅๆ็คบ
{
"exam_123": { // ้ฎ๏ผexamId
"123456": [1, 2], // ๅผ๏ผquestionId -> answer
"123457": [1],
// ...
},
"exam_456": { ... }
}- ๆๅจๆธ ้ค๏ผ็นๅปๆฌๆตฎ็ช "ๆธ ็ฉบๆๆ้ขๅบ" ๆ้ฎ
- ็ผ็จๆธ
้ค๏ผ
chrome.storage.local.clear()
MIT License
zjuatri - GitHub
ๆฌ้กน็ฎไป ไพๅญฆไน ไบคๆตไฝฟ็จ๏ผ่ฏทๅฟ็จไบไปปไฝๅไธ็จ้ๆ่ฟๅๅนณๅฐ่งๅ็่กไธบใไฝฟ็จๆฌๅทฅๅ ทๆไบง็็ไปปไฝๅๆ็ฑไฝฟ็จ่ ่ช่กๆฟๆ ใ
ๆ่ฐขๆๆไธบๆฌ้กน็ฎๆไพๅปบ่ฎฎๅๅ้ฆ็็จๆท๏ผ
ๅฆๆ้ฎ้ขๆๅปบ่ฎฎ๏ผๆฌข่ฟๆไบค Issue ๆ Pull Requestใ