javascript - การตั้งค่า user agent แบบกำหนดเองใน Chrome Extension Manifest Version 3 ไม่ถูกตั้งค่า
เรามีส่วนขยายที่มีเพียง 2 ไฟล์: manifest.json และ background.js
เบราว์เซอร์ (โครมเวอร์ชัน 112) ไม่รายงานข้อผิดพลาดใด ๆ แต่ตัวแทนผู้ใช้ไม่ได้ถูกตั้งค่าเป็น `my-custom-user-agent` นี่คือตัวโค้ดส่วนขยายทั้งหมด:
manifest.json
{
"name": "ua-customizer",
"version": "1",
"manifest_version": 3,
"permissions": [
"declarativeNetRequest"
],
"host_permissions": [
"<all_urls>"
],
"background": {
"service_worker": "background.js"
}
}
background.js
const rules = {
removeRuleIds: [1],
addRules: [
{
id: 1,
priority: 1,
action: {
type: 'modifyHeaders',
requestHeaders: [
{
header: 'user-agent',
operation: 'set',
value: `my-custom-user-agent`,
},
],
},
condition: {
urlFilter: '<all_urls>'
},
},
],
}
chrome.declarativeNetRequest.updateDynamicRules(rules);
มันขาดอะไรไป?
คำตอบ #1
การเปลี่ยนแปลง :
- แทนที่
urlFilter: '<all_urls>'ด้วยurlFilter: '*'เพราะ <all_urls> ไม่ใช่โครงสร้างที่รองรับใน urlFilter ดู chrome.declarativeNetRequest > RuleCondition > urlFilter - เพิ่ม
resourceTypes: [ 'main_frame' ]ไปที่ RuleCondition บางทีคุณอาจจะต้องเพิ่มชนิดของทรัพยากรอื่น ๆ ขึ้นอยู่กับเว็บไซต์ที่คุณกำลังใช้ส่วนขยาย แต่ "main_frame" ก็เพียงพอสำหรับ https://www.whatismybrowser.com/detect/what-is-my-user-agent/
โค้ดที่เปลี่ยนแปลง:
condition: {
resourceTypes: [ 'main_frame' ],
urlFilter: '*'
},
ทั้งสองการเปลี่ยนแปลงเป็นสิ่งจำเป็น
หากคุณทำเพียงการเปลี่ยนแปลงใดการเปลี่ยนแปลงหนึ่ง ส่วนขยายจะไม่แก้ไขสตริงผู้ใช้เอเจนต์
นอกจากนี้, chrome.declarativeNetRequest.updateDynamicRules(rules); จำเป็นต้องเรียกใช้งานครั้งเดียวเท่านั้น.
ดูที่ chrome.declarativeNetRequest > updateDynamicRules: "กฎเหล่านี้จะถูกเก็บรักษาไว้ตลอดช่วงเวลาของเบราว์เซอร์และการอัปเดตส่วนขยาย."
ฉันแนะนำให้วางมันในตัวจัดการ chrome.runtime.onInstalled:
chrome.runtime.onInstalled.addListener(function(details) {
chrome.declarativeNetRequest.updateDynamicRules(rules);
});
