برای جایگزینی عملکرد در انتقال از صفحات پسزمینه به کارمندان خدمات افزونه، توسعهدهندگان میتوانند از API chrome.offscreen
و مجوز مانیفست با شروع Chrome 109 استفاده کنند. درخواست این مجوز امکان ایجاد اسناد خارج از صفحه را برای استفاده از APIهای DOM بدون باز کردن مزاحم جدید فراهم میکند. پنجره ها یا برگه هایی که تجربه کاربر را مختل می کنند. chrome.offscreen
API اکنون در برنامههای افزودنی کروم در دسترس است.
در Chromium، افزونههای Manifest V3 مبتنی بر سرویسدهندگان هستند، اما سرویسکاران از همان APIها و مکانیسمهایی پشتیبانی نمیکنند که صفحات کامل مبتنی بر سند (که شامل صفحات پسزمینه و رویداد میشوند) پشتیبانی نمیکنند. علاوه بر این، استفاده از اسکریپتهای محتوا برای دسترسی به APIهای DOM در صفحات وب، برنامه افزودنی را به صورت صفحه به صفحه در اختیار سیاستهای امنیتی مختلف محتوا قرار میدهد. برای کمک به حل این مشکل، اسناد Offscreen را برای پشتیبانی از ویژگیها و APIهای مرتبط با DOM معرفی میکنیم و به افزونههای Manifest V3 اجازه میدهیم اسناد خارج از صفحه حداقل، محدودهدار و نسبتاً بدون مجوز را در زمان اجرا از طریق یک API اختصاصی باز کنند.
اطلاعات ویژگی
از آنجایی که اسناد خارج از صفحه به طور خاص برای رسیدگی به موارد استفاده که در سرویسکاران پشتیبانی نمیشوند طراحی شدهاند (مثلاً پخش صدا)، طول عمر این صفحه و مجوزهایی که به آن اعطا میشود جدا از مجوزهای کارگر خدمات افزودنی است. این صفحه دارای مکانیزم مادام العمری مشابه صفحات رویداد در Manifest V2 خواهد بود، به این صورت که وقتی انجام اقدامات را متوقف می کند، از بین می رود. علاوه بر این، عامل کاربر ممکن است محدودیتهای بیشتری را در طول عمر خاص به هدف مشخص شده اعمال کند. اسناد خارج از صفحه برای پر کردن شکاف های API هایی طراحی شده اند که فقط برای API های DOM قابل دسترسی هستند. به همین دلیل، APIهای افزونه نیازی به افشای مستقیم در این زمینه ندارند. برای کاهش احتمال استفاده از برنامههای افزودنی به عنوان «جایگزینی صفحه پسزمینه»، فقط APIهای پیامرسانی chrome.runtime
در معرض سند خارج از صفحه قرار میگیرند. (توسعه دهندگان همچنین ممکن است با ادعای سند خارج از صفحه به عنوان مشتری از طریق سرویس دهنده خود از پیام رسانی وب استفاده کنند.) از آنجایی که برخی از موارد استفاده - به ویژه خراش سایت - نیاز به دسترسی به فریم های متقاطع دارند، ما به این اسناد اجازه می دهیم فریم های متقاطع را جاسازی کنند. پیروی از قوانینی که امروزه صفحات افزونه دارند. در اسناد خارج از صفحه، اسکریپتهای محتوای مشخصشده توسط افزونه میتوانند در این فریمها اجرا شوند تا هر محتوای ضروری را مانند هر صفحه وب معمولی خراش دهند.
دلایل، و نیاز به یک هدف
ایجاد یک سند خارج از صفحه نیاز به دلایل ذکر شده و توجیه بیشتر دارد. این دلایل در مستندات مرجع API ذکر شده است و طول عمر سند را به روش های مختلف مدیریت می کند. به عنوان مثال، سندی که برای پخش صدا باز شده است در حال حاضر قوانین متفاوتی نسبت به سندی که برای مدیریت کلیپ بورد باز شده است، در طول عمر خود اعمال می کند. همچنین میتوانید جزئیات بیشتری را در مورد هدف سند خارج از صفحه در توجیه اضافه کنید، که یک رشته نوشته شده توسط توسعهدهنده است و نه پارامتری با اثرات روی سند. ممکن است در طول زمان دلایل بیشتری به API اضافه شود زیرا توسعه دهندگان بازخورد و موارد استفاده خود را به اشتراک می گذارند.
به آینده
برای سهولت پیاده سازی، اولین نسخه این API تنها از یک صفحه در هر پسوند، در هر نمایه پشتیبانی می کند. در نسخههای بعدی، ممکن است برای پشتیبانی از چندین صفحه، این کار را کاهش دهیم. در حال حاضر، اگر برنامه افزودنی در حالت تقسیم با نمایه ناشناس فعال اجرا شود، هر دو نمایه عادی و ناشناس میتوانند هر کدام یک سند خارج از صفحه داشته باشند. همچنین برنامه ریزی شده است که در مرحله بعدی قابلیت DOM به کارگر توسعه دهنده ارائه شود. میتوانید با جفتسازی توابعی که از API خارج از صفحه استفاده میکنند، برنامههای افزودنی خود را «مقاومسازی» کنید و یک تابع نظری معادل در سرویسکار برای تعویض در تاریخ بعد.
// Solution 1 - Service workers cannot directly interact with
// the system clipboard. To work around this, we'll create an offscreen
// document and pass the data we want to write to the clipboard.
async function addToClipboard(value) {
await chrome.offscreen.createDocument({
url: 'offscreen.html',
reasons: [chrome.offscreen.Reason.CLIPBOARD],
justification: 'Write text to the clipboard.',
});
}
// Solution 2 – Once extension service workers can use the Clipboard API,
// replace the offscreen document based implementation with something like this
async function addToClipboardV2(value) {
navigator.clipboard.writeText(value);
}
علاوه بر این، با اضافه شدن عملکرد DOM و APIها به سرویسکار، فهرست دلایل ایجاد یک سند بسته به وضعیت فعلی سرویسکار و دلایل استفاده از اسناد خارج از صفحه به آن اضافه یا کاهش مییابد.
نتیجه گیری
اسناد خارج از صفحه به افزونههایی اجازه میدهند که به DOM یا دسترسی تعاملی پنجرهای نیاز دارند که در حال حاضر در سرویسکاران قابل دستیابی نیست. همچنین یک رویکرد انعطافپذیر را ارائه میکند، که در آن موارد استفاده جدید را میتوان اضافه کرد و موارد استفاده حل شده در آینده را میتوان حذف کرد. برنامههای افزودنی باید از API سند خارج از صفحه پیشنهادی برای موارد استفاده خاص استفاده کنند، و زمینه پسزمینه اصلی برنامه افزودنی باید همان سرویسدهنده مشخصشده در مانیفست باقی بماند. سند خارج از صفحه نباید مکانی برای ذخیره منطق برنامه افزودنی اولیه باشد زیرا دسترسی API محدودی دارد. طول عمر یک سند خارج از صفحه مستقل از سرویس دهنده ای است که آن را ایجاد کرده است. ملاحظات مادام العمر کارمند خدمات و موارد استفاده مربوط به طول عمر کارگر خدمات در برنامه های افزودنی در یک پست وبلاگ جداگانه پوشش داده خواهد شد. دلایل استفاده از اسناد خارج از صفحه در طول زمان با اضافه شدن ویژگیها و APIها به خود سرویسکار تغییر میکند. ما مشتاق شنیدن بازخورد توسعهدهندگان هستیم.