chrome.declarativeNetRequest

توضیحات

API chrome.declarativeNetRequest برای مسدود کردن یا تغییر درخواست‌های شبکه با تعیین قوانین اعلانی استفاده می‌شود. این به افزونه‌ها اجازه می‌دهد درخواست‌های شبکه را بدون رهگیری و مشاهده محتوای آنها تغییر دهند و در نتیجه حریم خصوصی بیشتری را فراهم کنند.

مجوزها

declarativeNetRequest
declarativeNetRequestWithHostAccess

مجوزهای « declarativeNetRequest » و « declarativeNetRequestWithHostAccess » قابلیت‌های یکسانی را ارائه می‌دهند. تفاوت بین آنها در زمان درخواست یا اعطای مجوز است.

"declarativeNetRequest"
در زمان نصب، یک هشدار مجوز ایجاد می‌کند، اما دسترسی ضمنی به قوانین allow ، allowAllRequests و block را فراهم می‌کند. در صورت امکان از این مورد استفاده کنید تا از نیاز به درخواست دسترسی کامل به میزبان‌ها جلوگیری شود.
"declarativeNetRequestFeedback"
ویژگی‌های اشکال‌زدایی را برای افزونه‌های باز نشده ، به‌ویژه getMatchedRules() و onRuleMatchedDebug ، فعال می‌کند.
"declarativeNetRequestWithHostAccess"
هشدار مجوز در زمان نصب نمایش داده نمی‌شود، اما قبل از انجام هرگونه عملی روی یک میزبان، باید مجوزهای میزبان را درخواست کنید. این زمانی مناسب است که می‌خواهید از قوانین درخواست اعلانی شبکه در افزونه‌ای که از قبل مجوزهای میزبان را دارد، بدون ایجاد هشدارهای اضافی استفاده کنید.

در دسترس بودن

کروم ۸۴+

مانیفست

علاوه بر مجوزهایی که قبلاً توضیح داده شد، انواع خاصی از مجموعه قوانین، به طور خاص مجموعه قوانین استاتیک، نیاز به اعلام کلید مانیفست "declarative_net_request" دارند که باید یک دیکشنری با یک کلید واحد به نام "rule_resources" باشد. این کلید آرایه‌ای است که شامل دیکشنری‌هایی از نوع Ruleset است، همانطور که در ادامه نشان داده شده است. (توجه داشته باشید که نام 'Ruleset' در JSON مانیفست ظاهر نمی‌شود زیرا صرفاً یک آرایه است.) مجموعه قوانین استاتیک بعداً در این سند توضیح داده می‌شوند.

{
  "name": "My extension",
  ...

  "declarative_net_request" : {
    "rule_resources" : [{
      "id": "ruleset_1",
      "enabled": true,
      "path": "rules_1.json"
    }, {
      "id": "ruleset_2",
      "enabled": false,
      "path": "rules_2.json"
    }]
  },
  "permissions": [
    "declarativeNetRequest",
    "declarativeNetRequestFeedback"
  ],
  "host_permissions": [
    "http://www.blogger.com/*",
    "http://*.google.com/*"
  ],
  ...
}

قوانین و مجموعه قوانین

برای استفاده از این API، یک یا چند مجموعه قانون مشخص کنید. یک مجموعه قانون شامل آرایه‌ای از قوانین است. یک قانون واحد یکی از موارد زیر را انجام می‌دهد:

  • مسدود کردن درخواست شبکه
  • طرحواره را ارتقا دهید (http به https).
  • با نفی هرگونه قانون مسدود شده‌ی منطبق، از مسدود شدن یک درخواست جلوگیری کنید.
  • تغییر مسیر یک درخواست شبکه.
  • هدرهای درخواست یا پاسخ را تغییر دهید.

سه نوع مجموعه قوانین وجود دارد که به روش‌های کمی متفاوت مدیریت می‌شوند.

پویا
در طول جلسات مرورگر و ارتقاء افزونه‌ها باقی می‌مانند و در حین استفاده از افزونه، با استفاده از جاوا اسکریپت مدیریت می‌شوند.
جلسه
با خاموش شدن مرورگر و نصب نسخه جدید افزونه، پاک می‌شود. قوانین جلسه (session rules) در حین استفاده از افزونه با استفاده از جاوا اسکریپت مدیریت می‌شوند.
استاتیک
بسته‌بندی، نصب و به‌روزرسانی می‌شوند، زمانی که یک افزونه نصب یا ارتقا می‌یابد. قوانین استاتیک در فایل‌های قوانین با فرمت JSON ذخیره شده و در فایل مانیفست فهرست می‌شوند.

مجموعه قوانین پویا و در محدوده جلسه

مجموعه قوانین پویا و جلسه‌ای با استفاده از جاوا اسکریپت در حین استفاده از افزونه مدیریت می‌شوند.

  • قوانین پویا در طول جلسات مرورگر و ارتقاء افزونه‌ها پابرجا می‌مانند.
  • قوانین جلسه با خاموش شدن مرورگر و نصب نسخه جدید افزونه پاک می‌شوند.

فقط یکی از این انواع مجموعه قوانین وجود دارد. یک افزونه می‌تواند با فراخوانی updateDynamicRules() و updateSessionRules() به صورت پویا قوانین را به آنها اضافه یا حذف کند، مشروط بر اینکه از محدودیت‌های قوانین تجاوز نشود. برای اطلاعات در مورد محدودیت‌های قوانین، به Rule limits مراجعه کنید. می‌توانید مثالی از این مورد را در زیر مثال‌های کد مشاهده کنید.

مجموعه قوانین ایستا

برخلاف قوانین پویا و جلسه‌ای، قوانین ایستا هنگام نصب یا ارتقاء یک افزونه، بسته‌بندی، نصب و به‌روزرسانی می‌شوند. آن‌ها در فایل‌های قوانین با فرمت JSON ذخیره می‌شوند که با استفاده از کلیدهای "declarative_net_request" و "rule_resources" همانطور که در بالا توضیح داده شد ، و همچنین یک یا چند دیکشنری Ruleset به افزونه نشان داده می‌شوند. یک دیکشنری Ruleset شامل مسیری به فایل قوانین، یک شناسه برای مجموعه قوانین موجود در فایل و اینکه آیا مجموعه قوانین فعال یا غیرفعال است، می‌باشد. دو مورد آخر هنگام فعال یا غیرفعال کردن یک مجموعه قوانین به صورت برنامه‌نویسی مهم هستند.

{
  ...
  "declarative_net_request" : {
    "rule_resources" : [{
      "id": "ruleset_1",
      "enabled": true,
      "path": "rules_1.json"
    },
    ...
    ]
  }
  ...
}

برای آزمایش فایل‌های قانون، افزونه خود را به صورت باز نشده بارگذاری کنید . خطاها و هشدارها در مورد قوانین استاتیک نامعتبر فقط برای افزونه‌های باز نشده نمایش داده می‌شوند. قوانین استاتیک نامعتبر در افزونه‌های بسته‌بندی شده نادیده گرفته می‌شوند.

بررسی سریع

تغییرات در مجموعه قوانین ایستا ممکن است واجد شرایط بررسی سریع باشند. برای تغییرات واجد شرایط، به بررسی سریع مراجعه کنید.

فعال و غیرفعال کردن قوانین و مجموعه قوانین ایستا

هم قوانین استاتیک منفرد و هم مجموعه قوانین استاتیک کامل می‌توانند در زمان اجرا فعال یا غیرفعال شوند.

مجموعه قوانین و مجموعه قوانین استاتیک فعال‌شده در طول جلسات مرورگر حفظ می‌شوند. هیچ‌کدام از آن‌ها در طول به‌روزرسانی‌های افزونه حفظ نمی‌شوند، به این معنی که فقط قوانینی که شما انتخاب کرده‌اید در فایل‌های قوانین خود باقی بمانند، پس از به‌روزرسانی در دسترس هستند.

به دلایل عملکردی، محدودیت‌هایی نیز برای تعداد قوانین و مجموعه قوانینی که می‌توانند همزمان فعال شوند، وجود دارد. برای بررسی تعداد قوانین اضافی که ممکن است فعال شوند، تابع getAvailableStaticRuleCount() را فراخوانی کنید. برای اطلاعات بیشتر در مورد محدودیت‌های قوانین، به Rule limits مراجعه کنید.

برای فعال یا غیرفعال کردن قوانین استاتیک، تابع updateStaticRules() فراخوانی کنید. این متد یک شیء UpdateStaticRulesOptions را می‌گیرد که شامل آرایه‌هایی از شناسه‌های قوانین برای فعال یا غیرفعال کردن است. شناسه‌ها با استفاده از کلید "id" از دیکشنری Ruleset تعریف می‌شوند. حداکثر تعداد قوانین استاتیک غیرفعال شده 5000 است.

برای فعال یا غیرفعال کردن مجموعه قوانین استاتیک، تابع updateEnabledRulesets() را فراخوانی کنید. این متد یک شیء UpdateRulesetOptions را می‌گیرد که شامل آرایه‌هایی از شناسه‌های مجموعه قوانین برای فعال یا غیرفعال کردن است. شناسه‌ها با استفاده از کلید "id" از دیکشنری Ruleset تعریف می‌شوند.

قوانین ساخت

صرف نظر از نوع، یک قانون با چهار فیلد شروع می‌شود، همانطور که در ادامه نشان داده شده است. در حالی که کلیدهای "id" و "priority" عدد می‌گیرند، کلیدهای "action" و "condition" ممکن است چندین شرط مسدود کردن و تغییر مسیر را ارائه دهند. قانون زیر تمام درخواست‌های اسکریپتی را که از "foo.com" به هر URL با "abc" به عنوان زیررشته سرچشمه می‌گیرند، مسدود می‌کند.

{
  "id" : 1,
  "priority": 1,
  "action" : { "type" : "block" },
  "condition" : {
    "urlFilter" : "abc",
    "initiatorDomains" : ["foo.com"],
    "resourceTypes" : ["script"]
  }
}

تطبیق URL

درخواست اعلانی شبکه (Declarative Net Request) امکان تطبیق URLها را با استفاده از سینتکس تطبیق الگو یا عبارات منظم فراهم می‌کند.

سینتکس فیلتر URL

کلید "condition" یک قانون، به کلید "urlFilter" اجازه می‌دهد تا روی URLهای تحت یک دامنه مشخص عمل کند. شما با استفاده از توکن‌های تطبیق الگو، الگوها را ایجاد می‌کنید. در اینجا چند مثال آورده شده است.

urlFilter مسابقات مطابقت ندارد
"abc" https://abcd.com
https://example.com/abcd
https://ab.com
"abc*d" https://abcd.com
https://example.com/abcxyzd
https://abc.com
"||a.example.com" https://a.example.com/
https://baexample.com/xyz
https://a.example.company
https://example.com/
"|https*" https://example.com http://example.com/
http://https.com
"example*^123|" https://example.com/123
‏http://abc.com/example?123‏
https://example.com/1234
https://abc.com/example0123

عبارات منظم

شرط‌ها همچنین می‌توانند از عبارات منظم استفاده کنند. به کلید "regexFilter" مراجعه کنید. برای کسب اطلاعات در مورد محدودیت‌هایی که برای این شرط‌ها اعمال می‌شود، به قوانینی که از عبارات منظم استفاده می‌کنند مراجعه کنید.

شرایط خوب URL را بنویسید

هنگام نوشتن قوانین مراقب باشید که همیشه کل دامنه را مطابقت دهید. در غیر این صورت، قانون شما ممکن است در موقعیت‌های غیرمنتظره‌ای مطابقت داشته باشد. برای مثال، هنگام استفاده از سینتکس تطبیق الگو:

  • google.com به اشتباه https://example.com/?param=google.com مطابقت دارد
  • ||google.com به اشتباه با https://google.company مطابقت دارد
  • https://www.google.com به اشتباه https://example.com/?param=https://www.google.com مطابقت دارد.

استفاده از موارد زیر را در نظر بگیرید:

  • ||google.com/ ، که با همه مسیرها و همه زیر دامنه‌ها مطابقت دارد.
  • |https://www.google.com/ که با همه مسیرها و بدون زیر دامنه‌ها مطابقت دارد.

به طور مشابه، از کاراکترهای ^ و / برای لنگر انداختن یک عبارت منظم استفاده کنید. برای مثال، ^https:\/\/www\.google\.com\/ با هر مسیری در https://www.google.com مطابقت دارد.

ارزیابی قانون

قوانین DNR توسط مرورگر در مراحل مختلف چرخه عمر درخواست شبکه اعمال می‌شوند.

قبل از درخواست

قبل از اینکه درخواستی ارسال شود، یک افزونه می‌تواند آن را با یک قانون منطبق مسدود یا هدایت کند (از جمله ارتقاء طرح از HTTP به HTTPS).

برای هر افزونه، مرورگر فهرستی از قوانین منطبق را تعیین می‌کند. قوانینی که دارای اکشن modifyHeaders هستند در اینجا گنجانده نشده‌اند زیرا بعداً به آنها پرداخته خواهد شد. علاوه بر این، قوانینی که دارای شرط responseHeaders هستند بعداً (زمانی که هدرهای پاسخ در دسترس باشند) در نظر گرفته می‌شوند و در اینجا گنجانده نشده‌اند.

سپس، برای هر افزونه، کروم حداکثر یک کاندید را برای هر درخواست انتخاب می‌کند. کروم با مرتب کردن تمام قوانین منطبق بر اساس اولویت، یک قانون منطبق پیدا می‌کند. قوانینی که اولویت یکسانی دارند بر اساس عمل ( allow یا allowAllRequests > block > upgradeScheme > redirect ) مرتب می‌شوند.

اگر کاندید یک قانون allow یا allowAllRequests باشد، یا فریمی که درخواست در آن انجام می‌شود قبلاً با یک قانون allowAllRequests با اولویت بالاتر یا مساوی از این افزونه مطابقت داشته باشد، درخواست "مجاز" تلقی می‌شود و افزونه هیچ تاثیری بر درخواست نخواهد داشت.

اگر بیش از یک افزونه بخواهد این درخواست را مسدود یا تغییر مسیر دهد، یک اقدام واحد برای انجام انتخاب می‌شود. کروم این کار را با مرتب‌سازی قوانین در block ترتیب > redirect یا upgradeScheme > allow یا allowAllRequests انجام می‌دهد. اگر دو قانون از یک نوع باشند، کروم قانون را از آخرین افزونه نصب شده انتخاب می‌کند.

قبل از ارسال هدرهای درخواست

قبل از اینکه کروم هدرهای درخواست را به سرور ارسال کند، هدرها بر اساس قوانین modifyHeaders مطابق، به‌روزرسانی می‌شوند.

کروم در یک افزونه‌ی واحد، با پیدا کردن تمام قوانین modifyHeaders منطبق، فهرستی از اصلاحاتی که باید انجام شود را می‌سازد. مشابه قبل، فقط قوانینی که اولویت بالاتری نسبت به هر قانون allow یا allowAllRequests منطبق دارند، گنجانده می‌شوند.

این قوانین توسط کروم به ترتیبی اعمال می‌شوند که قوانین مربوط به افزونه‌ای که اخیراً نصب شده است، همیشه قبل از قوانین افزونه‌ای قدیمی‌تر ارزیابی می‌شوند. علاوه بر این، قوانین با اولویت بالاتر از یک افزونه همیشه قبل از قوانین با اولویت پایین‌تر از همان افزونه اعمال می‌شوند. نکته قابل توجه این است که حتی در بین افزونه‌ها:

  • اگر یک قانون به یک سرصفحه (header) اضافه شود، قوانین با اولویت پایین‌تر فقط می‌توانند به آن سرصفحه اضافه شوند. عملیات تنظیم (set) و حذف (remove) مجاز نیستند.
  • اگر یک قانون، یک سرصفحه (header) تنظیم کند، فقط قوانین با اولویت پایین‌تر از همان افزونه می‌توانند به آن سرصفحه اضافه شوند. هیچ تغییر دیگری مجاز نیست.
  • اگر یک قانون، یک سرصفحه (header) را حذف کند، آنگاه قوانین با اولویت پایین‌تر نمی‌توانند سرصفحه را بیشتر تغییر دهند.

به محض دریافت پاسخ

پس از دریافت هدرهای پاسخ، کروم قوانین را با شرط responseHeaders ارزیابی می‌کند.

پس از مرتب‌سازی این قوانین بر اساس action و priority و حذف هرگونه قانونی که توسط یک قانون allow یا allowAllRequests منطبق، اضافی شده است (این اتفاق دقیقاً مشابه مراحل «قبل از درخواست» رخ می‌دهد)، کروم ممکن است درخواست را از طرف یک افزونه مسدود یا هدایت کند.

توجه داشته باشید که اگر درخواستی به این مرحله رسیده باشد، درخواست قبلاً به سرور ارسال شده و سرور داده‌هایی مانند بدنه درخواست را دریافت کرده است. یک قانون مسدود کردن یا تغییر مسیر با شرط هدرهای پاسخ همچنان اجرا می‌شود - اما نمی‌تواند درخواست را مسدود یا تغییر مسیر دهد.

در مورد قانون مسدودسازی، این موضوع توسط صفحه‌ای که باعث شده درخواست پاسخ مسدود شده دریافت کند و کروم درخواست را زودتر خاتمه دهد، مدیریت می‌شود. در مورد قانون تغییر مسیر، کروم درخواست جدیدی به URL تغییر مسیر داده شده ارسال می‌کند. حتماً در نظر بگیرید که آیا این رفتارها انتظارات حریم خصوصی افزونه شما را برآورده می‌کنند یا خیر.

اگر درخواست مسدود یا هدایت نشده باشد، کروم هرگونه قانون modifyHeaders اعمال می‌کند. اعمال تغییرات در هدرهای پاسخ به همان روشی که در «قبل از ارسال هدرهای درخواست» توضیح داده شده است، انجام می‌شود. اعمال تغییرات در هدرهای درخواست هیچ کاری انجام نمی‌دهد، زیرا درخواست قبلاً انجام شده است.

قوانین ایمن

قوانین امن به عنوان قوانینی با عملکرد block ، allow ، allowAllRequests یا upgradeScheme تعریف می‌شوند. این قوانین مشمول سهمیه قوانین پویای افزایش یافته هستند.

محدودیت‌های قانون

بارگذاری و ارزیابی قوانین در مرورگر، سربار عملکردی دارد، بنابراین هنگام استفاده از API محدودیت‌هایی اعمال می‌شود. این محدودیت‌ها به نوع قانونی که استفاده می‌کنید بستگی دارد.

قوانین ایستا

قوانین ایستا، آن‌هایی هستند که در فایل‌های قوانین اعلام‌شده در فایل مانیفست مشخص شده‌اند. یک افزونه می‌تواند تا ۱۰۰ مجموعه قوانین ایستا را به عنوان بخشی از کلید مانیفست "rule_resources" مشخص کند، اما فقط ۵۰ مورد از این مجموعه قوانین می‌توانند در یک زمان فعال شوند. مورد دوم MAX_NUMBER_OF_ENABLED_STATIC_RULESETS نامیده می‌شود. در مجموع، این مجموعه قوانین حداقل ۳۰،۰۰۰ قانون را تضمین می‌کنند. به این GUARANTEED_MINIMUM_STATIC_RULES می‌گویند.

تعداد قوانین موجود پس از آن بستگی به تعداد قوانین فعال شده توسط تمام افزونه‌های نصب شده روی مرورگر کاربر دارد. می‌توانید این تعداد را در زمان اجرا با فراخوانی getAvailableStaticRuleCount() پیدا کنید. می‌توانید نمونه‌ای از این مورد را در زیر مثال‌های کد مشاهده کنید.

قوانین جلسه

یک افزونه می‌تواند تا ۵۰۰۰ قانون جلسه داشته باشد. این به صورت MAX_NUMBER_OF_SESSION_RULES نمایش داده می‌شود.

قبل از کروم ۱۲۰، محدودیت ۵۰۰۰ قانون ترکیبی پویا و جلسه‌ای وجود داشت.

قوانین پویا

یک افزونه می‌تواند حداقل ۵۰۰۰ قانون پویا داشته باشد. این به صورت MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES نمایش داده می‌شود.

با شروع از کروم ۱۲۱، محدودیت بیشتری به تعداد ۳۰۰۰۰ قانون برای قوانین پویای ایمن وجود دارد که به صورت MAX_NUMBER_OF_DYNAMIC_RULES نمایش داده می‌شود. هر قانون ناامنی که در محدوده ۵۰۰۰ اضافه شود، نیز جزو این محدودیت محسوب می‌شود.

قبل از کروم ۱۲۰، محدودیت ۵۰۰۰ قانون پویا و جلسه‌ای ترکیبی وجود داشت.

قوانینی که از عبارات منظم استفاده می‌کنند

همه انواع قوانین می‌توانند از عبارات منظم استفاده کنند؛ با این حال، تعداد کل قوانین عبارات منظم از هر نوع نمی‌تواند از ۱۰۰۰ تجاوز کند. این مقدار MAX_NUMBER_OF_REGEX_RULES نامیده می‌شود.

علاوه بر این، هر قانون پس از کامپایل باید کمتر از ۲ کیلوبایت باشد. این تقریباً با پیچیدگی قانون مرتبط است. اگر سعی کنید قانونی را بارگذاری کنید که از این حد تجاوز کند، هشداری مانند زیر مشاهده خواهید کرد و قانون نادیده گرفته می‌شود.

rules_1.json: Rule with id 1 specified a more complex regex than allowed
as part of the "regexFilter" key.

تعامل با کارکنان خدماتی

یک declarativeNetRequest فقط برای درخواست‌هایی که به پشته شبکه می‌رسند اعمال می‌شود. این شامل پاسخ‌هایی از حافظه پنهان HTTP می‌شود، اما ممکن است شامل پاسخ‌هایی که از طریق کنترل‌کننده onfetch یک service worker عبور می‌کنند، نباشد. declarativeNetRequest بر پاسخ‌های تولید شده توسط service worker یا بازیابی شده از CacheStorage تأثیری نخواهد گذاشت، اما بر فراخوانی‌های fetch() که در یک service worker انجام می‌شود، تأثیر می‌گذارد.

منابع قابل دسترسی در وب

یک قانون declarativeNetRequest نمی‌تواند از یک درخواست منبع عمومی به منبعی که از طریق وب قابل دسترسی نیست، تغییر مسیر دهد. انجام این کار باعث ایجاد خطا می‌شود. این موضوع حتی اگر منبع مشخص شده که از طریق وب قابل دسترسی است، متعلق به افزونه تغییر مسیر دهنده باشد، صادق است. برای اعلام منابع برای declarativeNetRequest، از آرایه "web_accessible_resources" در مانیفست استفاده کنید.

اصلاح هدر

عملیات افزودن فقط برای هدرهای درخواست زیر پشتیبانی می‌شود: accept ، accept-encoding ، accept-language ، access-control-request-headers ، cache-control ، connection ، content-language ، cookie ، forwarded ، if-match ، if-none-match ، keep-alive ، range ، te ، trailer ، transfer-encoding ، upgrade ، user-agent ، via ، want-digest ، x-forwarded-for . این لیست مجاز به حروف کوچک و بزرگ حساس است ( اشکال ۴۴۹۱۵۲۹۰۲ ).

هنگام افزودن به هدر درخواست یا پاسخ، مرورگر در صورت امکان از جداکننده مناسب استفاده خواهد کرد.

مثال‌ها

مثال‌های کد

به‌روزرسانی قوانین پویا

مثال زیر نحوه فراخوانی تابع updateDynamicRules() را نشان می‌دهد. روال فراخوانی تابع updateSessionRules() نیز مشابه است.

// Get arrays containing new and old rules
const newRules = await getNewRules();
const oldRules = await chrome.declarativeNetRequest.getDynamicRules();
const oldRuleIds = oldRules.map(rule => rule.id);

// Use the arrays to update the dynamic rules
await chrome.declarativeNetRequest.updateDynamicRules({
  removeRuleIds: oldRuleIds,
  addRules: newRules
});

به‌روزرسانی مجموعه قوانین ایستا

مثال زیر نحوه فعال و غیرفعال کردن مجموعه قوانین را با در نظر گرفتن تعداد مجموعه قوانین استاتیک موجود و حداکثر تعداد مجموعه قوانین استاتیک فعال نشان می‌دهد. شما این کار را زمانی انجام می‌دهید که تعداد قوانین استاتیک مورد نیاز شما از تعداد مجاز بیشتر شود. برای اینکه این کار عملی شود، برخی از مجموعه قوانین شما باید با غیرفعال کردن برخی از مجموعه قوانین نصب شوند (تنظیم "Enabled" روی false در فایل مانیفست).

async function updateStaticRules(enableRulesetIds, disableCandidateIds) {
  // Create the options structure for the call to updateEnabledRulesets()
  let options = { enableRulesetIds: enableRulesetIds }
  // Get the number of enabled static rules
  const enabledStaticCount = await chrome.declarativeNetRequest.getEnabledRulesets();
  // Compare rule counts to determine if anything needs to be disabled so that
  // new rules can be enabled
  const proposedCount = enableRulesetIds.length;
  if (enabledStaticCount + proposedCount > chrome.declarativeNetRequest.MAX_NUMBER_OF_ENABLED_STATIC_RULESETS) {
    options.disableRulesetIds = disableCandidateIds
  }
  // Update the enabled static rules
  await chrome.declarativeNetRequest.updateEnabledRulesets(options);
}

مثال‌های قاعده

مثال‌های زیر نحوه اولویت‌بندی قوانین توسط کروم در یک افزونه را نشان می‌دهند. هنگام بررسی آنها، ممکن است بخواهید قوانین اولویت‌بندی را در یک پنجره جداگانه باز کنید.

کلید «اولویت»

این مثال‌ها نیاز به مجوز میزبان برای *://*.example.com/* دارند.

برای تعیین اولویت یک URL خاص، به کلید "priority" (تعریف شده توسط توسعه‌دهنده)، کلید "action" و کلید "urlFilter" نگاه کنید. این مثال‌ها به فایل قانون نمونه‌ای که در زیر آنها نشان داده شده است، اشاره دارند.

پیمایش به https://google.com
دو قانون این URL را پوشش می‌دهند: قوانینی با شناسه‌های ۱ و ۴. قانون با شناسه ۱ اعمال می‌شود زیرا اقدامات "block" اولویت بالاتری نسبت به اقدامات "redirect" دارند. قوانین باقی‌مانده اعمال نمی‌شوند زیرا برای URLهای طولانی‌تر هستند.
پیمایش به https://google.com/1234
به دلیل طولانی‌تر شدن URL، اکنون علاوه بر قوانین با شناسه‌های ۱ و ۴، قانون با شناسه ۲ نیز مطابقت دارد. قانون با شناسه ۲ اعمال می‌شود زیرا "allow" اولویت بالاتری نسبت به "block" و "redirect" دارد.
پیمایش به https://google.com/12345
هر چهار قانون با این URL مطابقت دارند. قانون با شناسه ۳ اعمال می‌شود زیرا اولویت تعریف‌شده توسط توسعه‌دهنده آن بالاترین اولویت در گروه است.
[
  {
    "id": 1,
    "priority": 1,
    "action": { "type": "block" },
    "condition": {"urlFilter": "||google.com/", "resourceTypes": ["main_frame"] }
  },
  {
    "id": 2,
    "priority": 1,
    "action": { "type": "allow" },
    "condition": { "urlFilter": "||google.com/123", "resourceTypes": ["main_frame"] }
  },
  {
    "id": 3,
    "priority": 2,
    "action": { "type": "block" },
    "condition": { "urlFilter": "||google.com/12345", "resourceTypes": ["main_frame"] }
  },
  {
    "id": 4,
    "priority": 1,
    "action": { "type": "redirect", "redirect": { "url": "https://example.com" } },
    "condition": { "urlFilter": "||google.com/", "resourceTypes": ["main_frame"] }
  },
]

تغییر مسیرها

مثال زیر نیاز به مجوز میزبان برای *://*.example.com/* دارد.

مثال زیر نحوه‌ی ریدایرکت کردن یک درخواست از example.com به صفحه‌ای درون خود افزونه را نشان می‌دهد. مسیر افزونه /a.jpg به chrome-extension://EXTENSION_ID/a.jpg تبدیل می‌شود، که در آن EXTENSION_ID شناسه‌ی افزونه‌ی شماست. برای اینکه این کار انجام شود، مانیفست باید /a.jpg به عنوان یک منبع قابل دسترسی از طریق وب اعلام کند.

{
  "id": 1,
  "priority": 1,
  "action": { "type": "redirect", "redirect": { "extensionPath": "/a.jpg" } },
  "condition": {
    "urlFilter": "||https://www.example.com/",
    "resourceTypes": ["main_frame"]
  }
}

کد زیر از کلید "transform" برای هدایت به زیر دامنه example.com استفاده می‌کند. این کد از یک لنگر نام دامنه ("||") برای رهگیری درخواست‌ها با هر طرحی از example.com استفاده می‌کند. کلید "scheme" در "transform" مشخص می‌کند که هدایت به زیر دامنه همیشه از "https" استفاده خواهد کرد.

{
  "id": 1,
  "priority": 1,
  "action": {
    "type": "redirect",
    "redirect": {
      "transform": { "scheme": "https", "host": "new.example.com" }
    }
  },
  "condition": {
    "urlFilter": "||example.com/",
    "resourceTypes": ["main_frame"]
  }
}

مثال زیر از عبارات منظم برای تغییر مسیر از https://www.abc.xyz.com/path به https://abc.xyz.com/path استفاده می‌کند. در کلید "regexFilter" ، توجه کنید که چگونه نقطه‌ها حذف می‌شوند و گروه گیرنده "abc" یا "def" را انتخاب می‌کند. کلید "regexSubstitution" اولین تطابق بازگشتی عبارت منظم را با استفاده از "\1" مشخص می‌کند. در این حالت، "abc" از URL تغییر مسیر داده شده گرفته شده و در جایگزینی قرار می‌گیرد.

{
  "id": 1,
  "priority": 1,
  "action": {
    "type": "redirect",
    "redirect": {
      "regexSubstitution": "https://\\1.xyz.com/"
    }
  },
  "condition": {
    "regexFilter": "^https://www\\.(abc|def)\\.xyz\\.com/",
    "resourceTypes": [
      "main_frame"
    ]
  }
}

سربرگ‌ها

مثال زیر تمام کوکی‌ها را هم از یک فریم اصلی و هم از هر فریم فرعی حذف می‌کند.

{
  "id": 1,
  "priority": 1,
  "action": {
    "type": "modifyHeaders",
    "requestHeaders": [{ "header": "cookie", "operation": "remove" }]
  },
  "condition": { "resourceTypes": ["main_frame", "sub_frame"] }
}

انواع

DomainType

این مشخص می‌کند که آیا درخواست، شخص اول یا شخص ثالث فریمی است که در آن ایجاد شده است. یک درخواست در صورتی شخص اول نامیده می‌شود که دامنه (eTLD+1) آن با فریمی که درخواست در آن ایجاد شده است، یکسان باشد.

شمارشی

"پارتی اول"
درخواست شبکه، اولین طرفِ فریمی است که از آن سرچشمه گرفته است.

"شخص ثالث"
درخواست شبکه، نسبت به فریمی که از آن سرچشمه گرفته، شخص ثالث است.

ExtensionActionOptions

کروم ۸۸+

خواص

  • نمایش تعداد اقدام به عنوان نشان متن

    بولی اختیاری

    اینکه آیا تعداد اقدامات یک صفحه به صورت خودکار به عنوان متن نشان افزونه نمایش داده شود یا خیر. این ترجیح در طول جلسات ثابت می‌ماند.

  • به‌روزرسانی برگه

    TabActionCountUpdate اختیاری است

    کروم ۸۹+

    جزئیات نحوه تنظیم تعداد اقدامات تب.

GetDisabledRuleIdsOptions

کروم ۱۱۱+

خواص

  • شناسه مجموعه قوانین

    رشته

    شناسه مربوط به یک Ruleset استاتیک.

GetRulesFilter

کروم ۱۱۱+

خواص

  • شناسه‌های قاعده

    عدد[] اختیاری

    در صورت مشخص شدن، فقط قوانینی با شناسه‌های منطبق گنجانده می‌شوند.

HeaderInfo

کروم ۱۲۸+

خواص

  • مقادیر مستثنی شده

    رشته[] اختیاری

    در صورت مشخص شدن، اگر هدر وجود داشته باشد اما مقدار آن حداقل شامل یک عنصر در این لیست باشد، این شرط مطابقت ندارد. این از همان سینتکس الگوی مطابقت مانند values ​​استفاده می‌کند.

  • سربرگ

    رشته

    نام هدر. این شرط فقط در صورتی روی نام مطابقت دارد که هم values و هم excludedValues مشخص نشده باشند.

  • ارزش‌ها

    رشته[] اختیاری

    در صورت مشخص شدن، این شرط در صورتی مطابقت دارد که مقدار سرآیند حداقل با یک الگو در این لیست مطابقت داشته باشد. این از تطبیق مقدار سرآیند غیر حساس به حروف بزرگ و کوچک به علاوه ساختارهای زیر پشتیبانی می‌کند:

    '*' : با هر تعداد کاراکتر مطابقت دارد.

    '?' : با صفر یا یک کاراکتر مطابقت دارد.

    می‌توان از '*' و '?' با یک بک‌اسلش صرف نظر کرد، مثلاً '\*' و '\?'

HeaderOperation

کروم ۸۶+

این، عملیات ممکن برای یک قانون "modifyHeaders" را شرح می‌دهد.

شمارشی

"ضمیمه کردن"
یک ورودی جدید برای هدر مشخص شده اضافه می‌کند. هنگام تغییر هدرهای یک درخواست، این عملیات فقط برای هدرهای خاص پشتیبانی می‌شود.

"تنظیم"
یک مقدار جدید برای هدر مشخص شده تنظیم می‌کند و هدرهای موجود با نام مشابه را حذف می‌کند.

"حذف کردن"
تمام ورودی‌های مربوط به سرآیند مشخص‌شده را حذف می‌کند.

IsRegexSupportedResult

کروم ۸۷+

خواص

  • پشتیبانی می‌شود

    بولی

  • دلیل عدم پشتیبانی از عبارت منظم را مشخص می‌کند. فقط در صورتی ارائه می‌شود که isSupported مقدار false داشته باشد.

MatchedRule

خواص

  • شناسه قاعده

    شماره

    شناسه‌ی یک قانون منطبق.

  • شناسه مجموعه قوانین

    رشته

    شناسه‌ی Ruleset این قانون به آن تعلق دارد. برای قانونی که از مجموعه قوانین پویا سرچشمه می‌گیرد، این مقدار برابر با DYNAMIC_RULESET_ID خواهد بود.

MatchedRuleInfo

خواص

  • شناسه برگه

    شماره

    شناسه‌ی برگه‌ای که درخواست از آن آغاز شده است، در صورتی که برگه هنوز فعال باشد. در غیر این صورت -1.

  • مهر زمانی

    شماره

    زمانی که قانون تطبیق داده شده است. مهرهای زمانی با قرارداد جاوا اسکریپت برای زمان‌ها مطابقت دارند، یعنی تعداد میلی‌ثانیه‌ها از زمان شروع.

MatchedRuleInfoDebug

خواص

MatchedRulesFilter

خواص

  • minTimeStamp

    شماره اختیاری

    در صورت مشخص شدن، فقط با قوانینی که پس از مهر زمانی مشخص شده قرار دارند، مطابقت دارد.

  • شناسه برگه

    شماره اختیاری

    در صورت مشخص شدن، فقط با قوانین مربوط به تب داده شده مطابقت دارد. در صورت تنظیم روی -1، با قوانینی که با هیچ تب فعالی مرتبط نیستند، مطابقت دارد.

ModifyHeaderInfo

کروم ۸۶+

خواص

  • سربرگ

    رشته

    نام سربرگی که قرار است اصلاح شود.

  • عملیات

    عملیاتی که قرار است روی یک هدر انجام شود.

  • ارزش

    رشته اختیاری

    مقدار جدید برای سرآیند. باید برای عملیات append و set مشخص شود.

QueryKeyValue

خواص

  • کلید

    رشته

  • فقط جایگزین

    بولی اختیاری

    کروم ۹۴+

    اگر مقدار آن درست باشد، کلید پرس‌وجو فقط در صورتی جایگزین می‌شود که از قبل وجود داشته باشد. در غیر این صورت، اگر کلید وجود نداشته باشد، آن کلید نیز اضافه می‌شود. مقدار پیش‌فرض آن نادرست است.

  • ارزش

    رشته

QueryTransform

خواص

  • پارامترهای addOrReplace

    فهرست جفت‌های کلید-مقدار پرس‌وجو که باید اضافه یا جایگزین شوند.

  • حذف پارامترها

    رشته[] اختیاری

    فهرست کلیدهای پرس‌وجویی که باید حذف شوند.

Redirect

خواص

  • مسیر افزونه

    رشته اختیاری

    مسیر نسبت به دایرکتوری افزونه. باید با '/' شروع شود.

  • جایگزینی regex

    رشته اختیاری

    الگوی جایگزینی برای قوانینی که regexFilter مشخص می‌کنند. اولین مورد منطبق با regexFilter در url با این الگو جایگزین می‌شود. در regexSubstitution ، می‌توان از ارقام دارای بک‌اسلش (\1 تا \9) برای درج گروه‌های ضبط مربوطه استفاده کرد. \0 به کل متن منطبق اشاره دارد.

  • تبدیل کردن

    تبدیل URL اختیاری

    تبدیل‌های URL برای انجام.

  • آدرس اینترنتی

    رشته اختیاری

    آدرس اینترنتی تغییر مسیر. تغییر مسیر به آدرس‌های اینترنتی جاوا اسکریپت مجاز نیست.

RegexOptions

کروم ۸۷+

خواص

  • حساس به حروف بزرگ و کوچک

    بولی اختیاری

    اینکه آیا regex مشخص شده به حروف بزرگ و کوچک حساس است یا خیر. مقدار پیش‌فرض true است.

  • عبارت منظم

    رشته

    عبارت منظم برای بررسی.

  • نیاز به گرفتن

    بولی اختیاری

    اینکه آیا regex مشخص شده نیاز به ضبط دارد یا خیر. ضبط فقط برای قوانین تغییر مسیری که یک عمل regexSubstition را مشخص می‌کنند، لازم است. مقدار پیش‌فرض false است.

RequestDetails

خواص

  • شناسه سند

    رشته اختیاری

    کروم ۱۰۶+

    شناسه منحصر به فرد برای سند فریم، اگر این درخواست برای یک فریم باشد.

  • چرخه عمر سند

    چرخه عمر سند (اختیاری)

    کروم ۱۰۶+

    چرخه حیات سند فریم، اگر این درخواست برای یک فریم باشد.

  • شناسه قاب

    شماره

    مقدار ۰ نشان می‌دهد که درخواست در فریم اصلی اتفاق می‌افتد؛ مقدار مثبت نشان دهنده شناسه یک زیرفریم است که درخواست در آن اتفاق می‌افتد. اگر سند یک (زیرفریم) بارگذاری شود ( type main_frame یا sub_frame باشد)، frameId شناسه این فریم را نشان می‌دهد، نه شناسه فریم بیرونی. شناسه‌های فریم در یک تب منحصر به فرد هستند.

  • نوع قاب

    نوع قاب اختیاری

    کروم ۱۰۶+

    نوع فریم، اگر این درخواست برای یک فریم باشد.

  • آغازگر

    رشته اختیاری

    مبدایی که درخواست از آنجا آغاز شده است. این مورد از طریق تغییر مسیرها تغییر نمی‌کند. اگر این یک مبدا مبهم باشد، از رشته 'null' استفاده خواهد شد.

  • روش

    رشته

    روش استاندارد HTTP.

  • شناسه سند والد

    رشته اختیاری

    کروم ۱۰۶+

    شناسه منحصر به فرد برای سند والد فریم، اگر این درخواست برای یک فریم باشد و والد داشته باشد.

  • شناسه والدفریم

    شماره

    شناسه فریمی که فریمی که درخواست را ارسال کرده است را در بر می‌گیرد. اگر فریم والدی وجود نداشته باشد، روی -۱ تنظیم می‌شود.

  • شناسه درخواست

    رشته

    شناسه درخواست. شناسه‌های درخواست در یک جلسه مرورگر منحصر به فرد هستند.

  • شناسه برگه

    شماره

    شناسه‌ی برگه‌ای که درخواست در آن انجام می‌شود. اگر درخواست مربوط به برگه‌ای نباشد، روی -۱ تنظیم کنید.

  • نوع منبع درخواست.

  • آدرس اینترنتی

    رشته

    آدرس اینترنتی (URL) درخواست.

RequestMethod

کروم ۹۱+

این روش درخواست HTTP یک درخواست شبکه را توصیف می‌کند.

شمارشی

"وصل کردن"

"حذف"

"دریافت"

"سر"

«گزینه‌ها»

"وصله"

«پست»

"گذاشتن"

«دیگر»

ResourceType

این نوع منبع درخواست شبکه را توصیف می‌کند.

شمارشی

"فریم_اصلی"

"زیر_فریم"

"شیوه‌نامه"

«فیلمنامه»

«تصویر»

"فونت"

"شیء"

"درخواست xmlhttp"

"پینگ"

"گزارش csp"

«رسانه»

"سوکت وب"

"حمل و نقل تحت وب"

"بسته وب"

«دیگر»

Rule

خواص

  • اقدامی که در صورت مطابقت با این قانون باید انجام شود.

  • وضعیت

    شرایطی که تحت آن این قانون فعال می‌شود.

  • شناسه

    شماره

    یک شناسه که به طور منحصر به فرد یک قانون را مشخص می‌کند. اجباری است و باید بزرگتر یا مساوی ۱ باشد.

  • اولویت

    شماره اختیاری

    اولویت قانون. پیش‌فرض ۱. در صورت مشخص شدن، باید >= ۱ باشد.

RuleAction

خواص

  • تغییر مسیر

    تغییر مسیر اختیاری

    نحوه انجام ریدایرکت را شرح می‌دهد. فقط برای قوانین ریدایرکت معتبر است.

  • درخواست‌ها

    ModifyHeaderInfo [] اختیاری

    کروم ۸۶+

    هدرهای درخواست برای تغییر در درخواست. فقط در صورتی معتبر است که RuleActionType برابر با "modifyHeaders" باشد.

  • هدرهای پاسخ

    ModifyHeaderInfo [] اختیاری

    کروم ۸۶+

    هدرهای پاسخ برای تغییر در درخواست. فقط در صورتی معتبر است که RuleActionType برابر با "modifyHeaders" باشد.

  • نوع عملی که باید انجام شود.

RuleActionType

نوع اقدامی را که در صورت مطابقت با یک RuleCondition مشخص باید انجام شود، توصیف می‌کند.

شمارشی

"بلوک"
درخواست شبکه را مسدود کنید.

"تغییر مسیر"
درخواست شبکه را تغییر مسیر دهید.

«اجازه دادن»
درخواست شبکه را مجاز کن. اگر قانون مجاز با آن مطابقت داشته باشد، درخواست رهگیری نخواهد شد.

"طرح ارتقا"
اگر درخواست از نوع http یا ftp است، طرح آدرس اینترنتی درخواست شبکه را به https ارتقا دهید.

"اصلاح هدرها"
هدرهای درخواست/پاسخ را از درخواست شبکه تغییر دهید.

"اجازه دادن به همه درخواست‌ها"
به همه درخواست‌های درون یک سلسله مراتب فریم، از جمله خود درخواست فریم، اجازه دهید.

RuleCondition

خواص

  • نوع دامنه

    نوع دامنه اختیاری

    مشخص می‌کند که آیا درخواست شبکه، مربوط به دامنه‌ای است که از آن سرچشمه گرفته و توسط شخص اول یا شخص ثالث ارسال شده است. در صورت حذف، همه درخواست‌ها پذیرفته می‌شوند.

  • دامنه‌ها

    رشته[] اختیاری

    از زمان کروم ۱۰۱ منسوخ شده است

    به جای آن از initiatorDomains استفاده کنید

    این قانون فقط درخواست‌های شبکه‌ای که از لیست domains سرچشمه می‌گیرند را مطابقت می‌دهد.

  • دامنه‌های مستثنی‌شده

    رشته[] اختیاری

    از زمان کروم ۱۰۱ منسوخ شده است

    به جای آن از excludedInitiatorDomains استفاده کنید

    این قانون با درخواست‌های شبکه‌ای که از لیست excludedDomains سرچشمه می‌گیرند، مطابقت نخواهد داشت.

  • دامنه‌های آغازگر مستثنی‌شده

    رشته[] اختیاری

    کروم ۱۰۱+

    این قانون با درخواست‌های شبکه‌ای که از لیست excludedInitiatorDomains سرچشمه می‌گیرند، مطابقت نخواهد داشت. اگر لیست خالی یا حذف شده باشد، هیچ دامنه‌ای مستثنی نمی‌شود. این بر initiatorDomains اولویت دارد.

    یادداشت‌ها:

    • زیر دامنه‌هایی مانند "a.example.com" نیز مجاز هستند.
    • ورودی‌ها باید فقط شامل کاراکترهای اسکی (ascii) باشند.
    • برای دامنه‌های بین‌المللی از کدگذاری punycode استفاده کنید.
    • این با آغازگر درخواست مطابقت دارد و نه با آدرس اینترنتی درخواست.
    • زیر دامنه‌های دامنه‌های ذکر شده نیز مستثنی هستند.
  • دامنه‌های درخواستی مستثنی‌شده

    رشته[] اختیاری

    کروم ۱۰۱+

    این قانون درخواست‌های شبکه را در صورتی که دامنه‌ها با یکی از دامنه‌های موجود در لیست excludedRequestDomains مطابقت داشته باشند، مطابقت نمی‌دهد. اگر لیست خالی یا حذف شده باشد، هیچ دامنه‌ای مستثنی نمی‌شود. این مورد بر requestDomains اولویت دارد.

    یادداشت‌ها:

    • زیر دامنه‌هایی مانند "a.example.com" نیز مجاز هستند.
    • ورودی‌ها باید فقط شامل کاراکترهای اسکی (ascii) باشند.
    • برای دامنه‌های بین‌المللی از کدگذاری punycode استفاده کنید.
    • زیر دامنه‌های دامنه‌های ذکر شده نیز مستثنی هستند.
  • متدهای درخواست حذف‌شده

    RequestMethod [] اختیاری

    کروم ۹۱+

    فهرست متدهای درخواستی که قانون با آنها مطابقت نخواهد داشت. فقط یکی از requestMethods و excludedRequestMethods باید مشخص شود. اگر هیچ یک از آنها مشخص نشود، تمام متدهای درخواست مطابقت داده می‌شوند.

  • انواع منابع مستثنی شده

    نوع منبع [] اختیاری

    فهرست انواع منابعی که قانون با آنها مطابقت نخواهد داشت. فقط یکی از resourceTypes و excludedResourceTypes باید مشخص شود. اگر هیچ یک از آنها مشخص نشود، همه انواع منابع به جز "main_frame" مسدود می‌شوند.

  • هدرهای پاسخ مستثنی شده

    اطلاعات سربرگ [] اختیاری

    کروم ۱۲۸+

    اگر درخواست با هر یک از شرایط هدر پاسخ در این لیست (در صورت مشخص شدن) مطابقت داشته باشد، قانون مطابقت ندارد. اگر هر دو excludedResponseHeaders و responseHeaders مشخص شده باشند، آنگاه ویژگی excludedResponseHeaders اولویت دارد.

  • TabId های حذف شده

    عدد[] اختیاری

    کروم ۹۲+

    فهرست tabs.Tab.id که قانون نباید با آنها مطابقت داشته باشد. شناسه tabs.TAB_ID_NONE درخواست‌هایی را که از یک تب سرچشمه نمی‌گیرند، حذف می‌کند. فقط برای قوانین محدود به جلسه پشتیبانی می‌شود.

  • دامنه‌های آغازگر

    رشته[] اختیاری

    کروم ۱۰۱+

    این قانون فقط درخواست‌های شبکه‌ای که از لیست initiatorDomains سرچشمه می‌گیرند را مطابقت می‌دهد. اگر این لیست حذف شود، این قانون برای درخواست‌های همه دامنه‌ها اعمال می‌شود. لیست خالی مجاز نیست.

    یادداشت‌ها:

    • زیر دامنه‌هایی مانند "a.example.com" نیز مجاز هستند.
    • ورودی‌ها باید فقط شامل کاراکترهای اسکی (ascii) باشند.
    • برای دامنه‌های بین‌المللی از کدگذاری punycode استفاده کنید.
    • این با آغازگر درخواست مطابقت دارد و نه با آدرس اینترنتی درخواست.
    • زیر دامنه‌های دامنه‌های ذکر شده نیز مطابقت دارند.
  • حساس به حروف بزرگ و کوچک (isUrlFilterSensitive)

    بولی اختیاری

    اینکه آیا urlFilter یا regexFilter (هر کدام که مشخص شده باشد) به حروف کوچک و بزرگ حساس است یا خیر. مقدار پیش‌فرض false است.

  • فیلتر منظم

    رشته اختیاری

    عبارت منظم برای تطبیق با آدرس اینترنتی درخواست شبکه. این از سینتکس RE2 پیروی می‌کند.

    نکته: فقط یکی از urlFilter یا regexFilter را می‌توان مشخص کرد.

    نکته: regexFilter باید فقط از کاراکترهای ASCII تشکیل شده باشد. این با url ای که میزبان آن با فرمت punycode کدگذاری شده است (در مورد دامنه‌های بین‌المللی) و سایر کاراکترهای غیر اسکی با utf-8 کدگذاری شده‌اند، مطابقت دارد.

  • درخواست دامنه‌ها

    رشته[] اختیاری

    کروم ۱۰۱+

    این قانون فقط زمانی درخواست‌های شبکه را مطابقت می‌دهد که دامنه با یکی از دامنه‌های موجود در لیست requestDomains مطابقت داشته باشد. اگر لیست حذف شود، این قانون برای درخواست‌های همه دامنه‌ها اعمال می‌شود. لیست خالی مجاز نیست.

    یادداشت‌ها:

    • زیر دامنه‌هایی مانند "a.example.com" نیز مجاز هستند.
    • ورودی‌ها باید فقط شامل کاراکترهای اسکی (ascii) باشند.
    • برای دامنه‌های بین‌المللی از کدگذاری punycode استفاده کنید.
    • زیر دامنه‌های دامنه‌های ذکر شده نیز مطابقت دارند.
  • متدهای درخواست

    RequestMethod [] اختیاری

    کروم ۹۱+

    فهرستی از روش‌های درخواست HTTP که این قانون می‌تواند با آنها مطابقت داشته باشد. فهرست خالی مجاز نیست.

    نکته: تعیین شرط قانون requestMethods ، درخواست‌های غیر HTTP(ها) را نیز مستثنی می‌کند، در حالی که تعیین excludedRequestMethods چنین نخواهد کرد.

  • انواع منابع

    نوع منبع [] اختیاری

    فهرست انواع منابعی که قانون می‌تواند با آنها مطابقت داشته باشد. فهرست خالی مجاز نیست.

    توجه: این مورد باید برای قوانین allowAllRequests مشخص شود و فقط می‌تواند شامل انواع منابع sub_frame و main_frame باشد.

  • هدرهای پاسخ

    اطلاعات سربرگ [] اختیاری

    کروم ۱۲۸+

    اگر درخواست با هر یک از شرایط هدر پاسخ در این لیست (در صورت مشخص شدن) مطابقت داشته باشد، قانون مطابقت دارد.

  • شناسه‌های برگه

    عدد[] اختیاری

    Chrome 92+

    List of tabs.Tab.id which the rule should match. An ID of tabs.TAB_ID_NONE matches requests which don't originate from a tab. An empty list is not allowed. Only supported for session-scoped rules.

  • urlFilter

    رشته اختیاری

    The pattern which is matched against the network request url. Supported constructs:

    '*' : Wildcard: Matches any number of characters.

    '|' : Left/right anchor: If used at either end of the pattern, specifies the beginning/end of the url respectively.

    '||' : Domain name anchor: If used at the beginning of the pattern, specifies the start of a (sub-)domain of the URL.

    '^' : Separator character: This matches anything except a letter, a digit, or one of the following: _ , - , . , or % . This also match the end of the URL.

    Therefore urlFilter is composed of the following parts: (optional Left/Domain name anchor) + pattern + (optional Right anchor).

    If omitted, all urls are matched. An empty string is not allowed.

    A pattern beginning with ||* is not allowed. Use * instead.

    Note: Only one of urlFilter or regexFilter can be specified.

    Note: The urlFilter must be composed of only ASCII characters. This is matched against a url where the host is encoded in the punycode format (in case of internationalized domains) and any other non-ascii characters are url encoded in utf-8. For example, when the request url is http://abc.рф?q=ф, the urlFilter will be matched against the url http://abc.xn--p1ai/?q=%D1%84.

Ruleset

خواص

  • فعال شده

    بولی

    Whether the ruleset is enabled by default.

  • شناسه

    رشته

    A non-empty string uniquely identifying the ruleset. IDs beginning with '_' are reserved for internal use.

  • مسیر

    رشته

    The path of the JSON ruleset relative to the extension directory.

RulesMatchedDetails

خواص

TabActionCountUpdate

Chrome 89+

خواص

  • افزایش

    شماره

    The amount to increment the tab's action count by. Negative values will decrement the count.

  • tabId

    شماره

    The tab for which to update the action count.

TestMatchOutcomeResult

Chrome 103+

خواص

  • matchedRules

    The rules (if any) that match the hypothetical request.

TestMatchRequestDetails

Chrome 103+

خواص

  • آغازگر

    رشته اختیاری

    The initiator URL (if any) for the hypothetical request.

  • روش

    RequestMethod optional

    Standard HTTP method of the hypothetical request. Defaults to "get" for HTTP requests and is ignored for non-HTTP requests.

  • responseHeaders

    object optional

    Chrome 129+

    The headers provided by a hypothetical response if the request does not get blocked or redirected before it is sent. Represented as an object which maps a header name to a list of string values. If not specified, the hypothetical response would return empty response headers, which can match rules which match on the non-existence of headers. Eg {"content-type": ["text/html; charset=utf-8", "multipart/form-data"]}

  • tabId

    number optional

    The ID of the tab in which the hypothetical request takes place. Does not need to correspond to a real tab ID. Default is -1, meaning that the request isn't related to a tab.

  • نوع

    The resource type of the hypothetical request.

  • آدرس اینترنتی

    رشته

    The URL of the hypothetical request.

UnsupportedRegexReason

Chrome 87+

Describes the reason why a given regular expression isn't supported.

Enum

"syntaxError"
The regular expression is syntactically incorrect, or uses features not available in the RE2 syntax .

"memoryLimitExceeded"
The regular expression exceeds the memory limit.

UpdateRuleOptions

Chrome 87+

خواص

  • addRules

    Rule [] optional

    Rules to add.

  • removeRuleIds

    number[] optional

    IDs of the rules to remove. Any invalid IDs will be ignored.

UpdateRulesetOptions

Chrome 87+

خواص

  • disableRulesetIds

    string[] optional

    The set of ids corresponding to a static Ruleset that should be disabled.

  • enableRulesetIds

    string[] optional

    The set of ids corresponding to a static Ruleset that should be enabled.

UpdateStaticRulesOptions

Chrome 111+

خواص

  • disableRuleIds

    number[] optional

    Set of ids corresponding to rules in the Ruleset to disable.

  • enableRuleIds

    number[] optional

    Set of ids corresponding to rules in the Ruleset to enable.

  • rulesetId

    رشته

    The id corresponding to a static Ruleset .

URLTransform

خواص

  • قطعه قطعه

    رشته اختیاری

    The new fragment for the request. Should be either empty, in which case the existing fragment is cleared; or should begin with '#'.

  • میزبان

    رشته اختیاری

    The new host for the request.

  • رمز عبور

    رشته اختیاری

    The new password for the request.

  • مسیر

    رشته اختیاری

    The new path for the request. If empty, the existing path is cleared.

  • بندر

    رشته اختیاری

    The new port for the request. If empty, the existing port is cleared.

  • پرس و جو

    رشته اختیاری

    The new query for the request. Should be either empty, in which case the existing query is cleared; or should begin with '?'.

  • queryTransform

    QueryTransform optional

    Add, remove or replace query key-value pairs.

  • طرح

    رشته اختیاری

    The new scheme for the request. Allowed values are "http", "https", "ftp" and "chrome-extension".

  • نام کاربری

    رشته اختیاری

    The new username for the request.

خواص

DYNAMIC_RULESET_ID

Ruleset ID for the dynamic rules added by the extension.

ارزش

"_dynamic"

GETMATCHEDRULES_QUOTA_INTERVAL

Time interval within which MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL getMatchedRules calls can be made, specified in minutes. Additional calls will fail immediately and set runtime.lastError . Note: getMatchedRules calls associated with a user gesture are exempt from the quota.

ارزش

۱۰

GUARANTEED_MINIMUM_STATIC_RULES

Chrome 89+

The minimum number of static rules guaranteed to an extension across its enabled static rulesets. Any rules above this limit will count towards the global static rule limit .

ارزش

۳۰۰۰۰

MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL

The number of times getMatchedRules can be called within a period of GETMATCHEDRULES_QUOTA_INTERVAL .

ارزش

۲۰

MAX_NUMBER_OF_DYNAMIC_RULES

The maximum number of dynamic rules that an extension can add.

ارزش

۳۰۰۰۰

MAX_NUMBER_OF_ENABLED_STATIC_RULESETS

Chrome 94+

The maximum number of static Rulesets an extension can enable at any one time.

ارزش

۵۰

MAX_NUMBER_OF_REGEX_RULES

The maximum number of regular expression rules that an extension can add. This limit is evaluated separately for the set of dynamic rules and those specified in the rule resources file.

ارزش

۱۰۰۰

MAX_NUMBER_OF_SESSION_RULES

کروم ۱۲۰+

The maximum number of session scoped rules that an extension can add.

ارزش

۵۰۰۰

MAX_NUMBER_OF_STATIC_RULESETS

The maximum number of static Rulesets an extension can specify as part of the "rule_resources" manifest key.

ارزش

۱۰۰

MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES

کروم ۱۲۰+

The maximum number of "unsafe" dynamic rules that an extension can add.

ارزش

۵۰۰۰

MAX_NUMBER_OF_UNSAFE_SESSION_RULES

کروم ۱۲۰+

The maximum number of "unsafe" session scoped rules that an extension can add.

ارزش

۵۰۰۰

SESSION_RULESET_ID

Chrome 90+

Ruleset ID for the session-scoped rules added by the extension.

ارزش

"_session"

روش‌ها

getAvailableStaticRuleCount()

Chrome 89+
chrome.declarativeNetRequest.getAvailableStaticRuleCount(): Promise<number>

Returns the number of static rules an extension can enable before the global static rule limit is reached.

بازگشت‌ها

  • Promise<number>

    Chrome 91+

getDisabledRuleIds()

Chrome 111+
chrome.declarativeNetRequest.getDisabledRuleIds(
  options: GetDisabledRuleIdsOptions,
)
: Promise<number[]>

Returns the list of static rules in the given Ruleset that are currently disabled.

پارامترها

بازگشت‌ها

  • Promise<number[]>

getDynamicRules()

chrome.declarativeNetRequest.getDynamicRules(
  filter?: GetRulesFilter,
)
: Promise<Rule[]>

Returns the current set of dynamic rules for the extension. Callers can optionally filter the list of fetched rules by specifying a filter .

پارامترها

  • فیلتر

    GetRulesFilter optional

    Chrome 111+

    An object to filter the list of fetched rules.

بازگشت‌ها

  • Promise< Rule []>

    Chrome 91+

getEnabledRulesets()

chrome.declarativeNetRequest.getEnabledRulesets(): Promise<string[]>

Returns the ids for the current set of enabled static rulesets.

بازگشت‌ها

  • Promise<string[]>

    Chrome 91+

getMatchedRules()

chrome.declarativeNetRequest.getMatchedRules(
  filter?: MatchedRulesFilter,
)
: Promise<RulesMatchedDetails>

Returns all rules matched for the extension. Callers can optionally filter the list of matched rules by specifying a filter . This method is only available to extensions with the "declarativeNetRequestFeedback" permission or having the "activeTab" permission granted for the tabId specified in filter . Note: Rules not associated with an active document that were matched more than five minutes ago will not be returned.

پارامترها

بازگشت‌ها

getSessionRules()

Chrome 90+
chrome.declarativeNetRequest.getSessionRules(
  filter?: GetRulesFilter,
)
: Promise<Rule[]>

Returns the current set of session scoped rules for the extension. Callers can optionally filter the list of fetched rules by specifying a filter .

پارامترها

  • فیلتر

    GetRulesFilter optional

    Chrome 111+

    An object to filter the list of fetched rules.

بازگشت‌ها

  • Promise< Rule []>

    Chrome 91+

isRegexSupported()

Chrome 87+
chrome.declarativeNetRequest.isRegexSupported(
  regexOptions: RegexOptions,
)
: Promise<IsRegexSupportedResult>

Checks if the given regular expression will be supported as a regexFilter rule condition.

پارامترها

  • regexOptions

    The regular expression to check.

بازگشت‌ها

setExtensionActionOptions()

Chrome 88+
chrome.declarativeNetRequest.setExtensionActionOptions(
  options: ExtensionActionOptions,
)
: Promise<void>

Configures if the action count for tabs should be displayed as the extension action's badge text and provides a way for that action count to be incremented.

پارامترها

بازگشت‌ها

  • Promise<void>

    Chrome 91+

testMatchOutcome()

Chrome 103+
chrome.declarativeNetRequest.testMatchOutcome(
  request: TestMatchRequestDetails,
)
: Promise<TestMatchOutcomeResult>

Checks if any of the extension's declarativeNetRequest rules would match a hypothetical request. Note: Only available for unpacked extensions as this is only intended to be used during extension development.

پارامترها

بازگشت‌ها

updateDynamicRules()

chrome.declarativeNetRequest.updateDynamicRules(
  options: UpdateRuleOptions,
)
: Promise<void>

Modifies the current set of dynamic rules for the extension. The rules with IDs listed in options.removeRuleIds are first removed, and then the rules given in options.addRules are added. Notes:

  • This update happens as a single atomic operation: either all specified rules are added and removed, or an error is returned.
  • These rules are persisted across browser sessions and across extension updates.
  • Static rules specified as part of the extension package can not be removed using this function.
  • MAX_NUMBER_OF_DYNAMIC_RULES is the maximum number of dynamic rules an extension can add. The number of unsafe rules must not exceed MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES .

پارامترها

بازگشت‌ها

  • Promise<void>

    Chrome 91+

updateEnabledRulesets()

chrome.declarativeNetRequest.updateEnabledRulesets(
  options: UpdateRulesetOptions,
)
: Promise<void>

Updates the set of enabled static rulesets for the extension. The rulesets with IDs listed in options.disableRulesetIds are first removed, and then the rulesets listed in options.enableRulesetIds are added. Note that the set of enabled static rulesets is persisted across sessions but not across extension updates, ie the rule_resources manifest key will determine the set of enabled static rulesets on each extension update.

پارامترها

بازگشت‌ها

  • Promise<void>

    Chrome 91+

updateSessionRules()

Chrome 90+
chrome.declarativeNetRequest.updateSessionRules(
  options: UpdateRuleOptions,
)
: Promise<void>

Modifies the current set of session scoped rules for the extension. The rules with IDs listed in options.removeRuleIds are first removed, and then the rules given in options.addRules are added. Notes:

  • This update happens as a single atomic operation: either all specified rules are added and removed, or an error is returned.
  • These rules are not persisted across sessions and are backed in memory.
  • MAX_NUMBER_OF_SESSION_RULES is the maximum number of session rules an extension can add.

پارامترها

بازگشت‌ها

  • Promise<void>

    Chrome 91+

updateStaticRules()

Chrome 111+
chrome.declarativeNetRequest.updateStaticRules(
  options: UpdateStaticRulesOptions,
)
: Promise<void>

Disables and enables individual static rules in a Ruleset . Changes to rules belonging to a disabled Ruleset will take effect the next time that it becomes enabled.

پارامترها

بازگشت‌ها

  • Promise<void>

رویدادها

onRuleMatchedDebug

chrome.declarativeNetRequest.onRuleMatchedDebug.addListener(
  callback: function,
)

Fired when a rule is matched with a request. Only available for unpacked extensions with the "declarativeNetRequestFeedback" permission as this is intended to be used for debugging purposes only.

پارامترها