خلاصه
چه چیزی در حال تغییر است؟
از ابتدا در Chrome 70، کاربران میتوانند دسترسی میزبان برنامههای افزودنی را به فهرست سفارشی سایتها محدود کنند، یا برنامههای افزودنی را به گونهای پیکربندی کنند که برای دسترسی به صفحه فعلی نیاز به کلیک داشته باشند.
کدام API ها تحت تأثیر قرار می گیرند؟
این تغییر روی هر APIهایی که تحت تأثیر مجوزهای میزبان مشخص شده در مانیفست برنامه افزودنی شما و همچنین اسکریپتهای محتوا هستند، تأثیر میگذارد. APIهایی که به مجوزهای میزبان نیاز دارند عبارتند از webRequest ، کوکیها ، ()tabs.executeScript و ()tabs.insertCSS ، و انجام درخواستهای متقاطع، مانند از طریق XMLHTTPRequest
یا fetch()
API.
محدود کردن دسترسی
چگونه کاربر می تواند دسترسی را محدود کند؟
کاربران میتوانند انتخاب کنند که برنامه افزودنی شما با کلیک، روی مجموعه خاصی از سایتها یا در همه سایتهای درخواستی اجرا شود. این گزینهها در صفحه chrome://extensions
و همچنین در منوی زمینه افزونه به کاربران ارائه میشوند.
اگر کاربر بخواهد برنامه افزودنی من را "روی کلیک" اجرا کند چه اتفاقی می افتد؟
برنامه افزودنی اساساً طوری رفتار می کند که انگار از مجوز activeTab استفاده می کند. اگر آن میزبان توسط برنامه افزودنی درخواست شده باشد، به هر میزبانی که کاربر روی برنامه افزودنی کلیک میکند (و یک سایت محدود مانند chrome://settings نیست) به برنامه افزودنی اجازه دسترسی موقت داده میشود. وقتی روی کلیک تنظیم شود، Chrome افزونه شما را با یک دایره و سایه انداخته نشان میدهد (به زیر مراجعه کنید) تا نشان دهد که درخواست دسترسی به یک سایت خاص را دارد.
اگر کاربر بخواهد برنامه افزودنی من را در سایت های خاصی اجرا کند چه اتفاقی می افتد؟
برنامه افزودنی شما مجاز است در هر سایتی که کاربر انتخاب کرده است به طور خودکار اجرا شود و می تواند بدون اقدام بیشتر کاربر به سایت دسترسی داشته باشد. در سایتهای دیگری که برنامه افزودنی شما درخواست کرده است، اما کاربر به آنها اجازه نداده است، رفتار مشابهی است که کاربر برنامه افزودنی را طوری تنظیم کرده است که روی کلیک اجرا شود.
اگر کاربر بخواهد برنامه افزودنی من را در همه سایت ها اجرا کند چه اتفاقی می افتد؟
برنامه افزودنی می تواند به طور خودکار به هر سایتی که در مانیفست درخواست شده است دسترسی داشته باشد.
رفتارهای API
API درخواست وب
برنامه افزودنی همچنان میتواند درخواستهای سایتهایی را که به آنها دسترسی دارد رهگیری، اصلاح و مسدود کند. برای سایتهایی که برنامه افزودنی به آنها دسترسی ندارد، Chrome به افزونه نشان میدهد تا نشان دهد که برنامه افزودنی درخواست دسترسی به صفحه را دارد. سپس کاربر می تواند اجازه دسترسی به برنامه افزودنی را بدهد. سپس کروم از کاربر میخواهد صفحه را بازخوانی کند تا برنامه افزودنی شما بتواند درخواستهای شبکه را رهگیری کند.
اسکریپت های محتوا، Tabs.executeScript()،tabs.insertCSS()
برنامه افزودنی همچنان می تواند اسکریپت ها و شیوه نامه ها را به صورت خودکار برای هر سایتی که به آن دسترسی دارد تزریق کند. برای سایتهایی که برنامه افزودنی به آنها دسترسی ندارد، Chrome به افزونه نشان میدهد تا نشان دهد که برنامه افزودنی درخواست دسترسی به صفحه را دارد. سپس کاربر می تواند به برنامه افزودنی دسترسی دهد. اگر اسکریپت محتوا برای تزریق در document_idle تنظیم شده بود، اسکریپت بلافاصله تزریق میشود. در غیر این صورت، Chrome از کاربر میخواهد صفحه را بازخوانی کند تا برنامه افزودنی شما بتواند اسکریپتها را زودتر در زمان بارگذاری صفحه (در document_start یا document_end) تزریق کند. تماسهای متدهای ()tabs.executeScript و ()tabs.insertCSS تنها در صورتی فراخوانی میشوند که کاربر اجازه دسترسی به سایت را بدهد.
صفحه کوکی ها و پس زمینه XHR
برنامه افزودنی همچنان میتواند کوکیهایی را از سایتهایی که به آنها دسترسی دارد بخواند و تغییر دهد و یک XHR با مبدا متقابل انجام دهد. از آنجایی که هیچ برگهای مرتبط با صفحه افزونه برای دسترسی به کوکیهای منبع دیگر یا XHRing به میزبان دیگری وجود ندارد، Chrome به برنامه افزودنی نشان نمیدهد تا به کاربر نشان دهد که برنامه افزودنی درخواست دسترسی به یک سایت را دارد. تلاش برای دسترسی به کوکی برای سایت دیگری یا ایجاد یک XHR با منبع متقاطع با خطا مواجه میشود که گویی مانیفست برنامه افزودنی شامل مجوز میزبان نیست. برای این موارد، ما شما را تشویق میکنیم که از مجوزهای اختیاری استفاده کنید تا به کاربر اجازه دسترسی زمان اجرا به سایتهای مختلف را بدهد.
مثال زیر نشان می دهد که چگونه این ممکن است برای API کوکی ها کار کند.
قبل از:
{
...
"permissions": ["cookies", "https://example.com"]
}
chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
function(cookie) {
// Use the cookie.
});
بعد از:
{
...
"permissions": ["cookies"],
"optional_permissions": ["https://example.com"]
}
// Note: permissions.request() requires a user gesture, so this
// may only be done in response to a user action.
chrome.permissions.request(
{origins: ['https://example.com']},
function(granted) {
if (granted) {
chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
function(cookie) {
// Use the cookie.
});
} else {
// Handle grant failure
}
});
مهاجرت
بهترین روش ها برای جلوگیری از تأثیر منفی چیست؟
برنامههای افزودنی میتوانند از مجوزهای اختیاری ، ActiveTab و APIهای DeclarativeContent برای پیروی از بهترین شیوهها استفاده کنند. مجوزهای اختیاری در زمان اجرا اعطا می شود و به برنامه افزودنی اجازه می دهد تا دسترسی خاصی به یک سایت درخواست کند. مجوز activeTab تحت تأثیر قرار نمیگیرد و افزونههایی که از آن استفاده میکنند به طور معمول به کار خود ادامه میدهند. DeclarativeContent API جایگزینی برای بسیاری از نیازها برای تزریق اسکریپت به هر صفحه است.
چه اتفاقی برای تنظیمات کاربران فعلی من میافتد؟
این تغییر فوراً روی مجوزهای فعلی اعطا شده به برنامه افزودنی شما تأثیر نمی گذارد. به این معنی که مانند قبل به کار خود ادامه می دهد مگر اینکه کاربر اقدامی برای محدود کردن سایت هایی که مجاز به دسترسی است انجام دهد. در نسخههای بعدی، Chrome کنترلهای بیشتری را برای تنظیم تنظیمات در اختیار کاربران قرار میدهد.
چگونه می توانم بررسی کنم که برنامه افزودنی من مجوز اجرا در یک سایت را دارد؟
میتوانید از API permissions.contains () استفاده کنید تا بررسی کنید که آیا برنامه افزودنی شما به یک منبع مشخص دسترسی پیدا کرده است یا خیر.