اگر وب سایت شما به تنظیم document.domain متکی است، اقدام شما ضروری است.
چه چیزی در حال تغییر است و چرا؟
از Chrome 115 ، وبسایتها نمیتوانند document.domain
تنظیم کنند: Chrome document.domain
غیرقابل تغییر میکند. برای برقراری ارتباط با مبدا متقابل، باید از رویکردهای جایگزین، مانند postMessage()
یا Channel Messaging API استفاده کنید.
توجه داشته باشید که این تغییر به تدریج اعمال خواهد شد.
ما انتظار داریم مرورگرهای دیگر در نهایت این قابلیت را منسوخ کرده و حذف کنند. برای جزئیات، بخش سازگاری مرورگر را مرور کنید.
چرا document.domain
تغییرناپذیر کنیم؟
document.domain
برای دریافت یا تنظیم نام میزبان مبدا طراحی شده است. بسیاری از وبسایتها document.domain
تنظیم میکنند تا امکان ارتباط بین صفحات همسایت اما متقاطع را فراهم کنند.
در حالی که این یک تکنیک راحت است، اما یک خطر امنیتی را معرفی می کند، زیرا سیاست همان مبدأ را کاهش می دهد . نگرانی های امنیتی در مورد document.domain
منجر به تغییر در مشخصات شده است که به کاربران هشدار می دهد از استفاده از آن خودداری کنند .
در جزئیات: چرا document.domain را تغییرناپذیر کنیم؟
چگونه document.domain
امروزه استفاده می شود
بسیاری از وبسایتها document.domain
تنظیم میکنند تا امکان ارتباط بین صفحات همسایت اما متقاطع را فراهم کنند.
سایت های یکسان اما متقاطع دارای eTLD+1 یکسان اما زیردامنه های متفاوت هستند.
در اینجا نحوه استفاده از document.domain
تا کنون آمده است:
فرض کنید صفحهای در https://parent.example.com
یک صفحه iframe را از https://video.example.com
جاسازی میکند. این صفحات دارای eTLD+1 یکسان ( example.com
) با زیر دامنه های مختلف هستند. هنگامی که هر دو صفحه document.domain
روی 'example.com'
تنظیم می شود، مرورگر با دو مبدا به گونه ای برخورد می کند که گویی یک منبع هستند.
document.domain
را برای https://parent.example.com
تنظیم کنید:
// Confirm the current origin of "parent.example.com"
console.log(document.domain);
// Set the document.domain
document.domain = 'example.com';
console.log(document.domain);
document.domain
را برای https://video.example.com
تنظیم کنید:
// Confirm the current origin of "video.example.com"
console.log(document.domain);
// Set the document.domain
document.domain = 'example.com';
console.log(document.domain);
اکنون می توانید در https://parent.example.com
در مقابل https://video.example.com
یک دستکاری DOM با منبع متقاطع ایجاد کنید.
وبسایتها document.domain
تنظیم میکنند تا امکان ارتباط آسانتر اسناد همان سایت را فراهم کنند. از آنجایی که این تغییر خط مشی مبدا یکسان را کاهش می دهد ، صفحه اصلی می تواند به سند iframe دسترسی داشته باشد و درخت DOM را طی کند و بالعکس.
این یک تکنیک راحت است، با این حال یک خطر امنیتی را معرفی می کند.
نگرانی های امنیتی با document.domain
نگرانی های امنیتی در مورد document.domain
منجر به تغییر در مشخصات شده است که به کاربران هشدار می دهد از استفاده از آن خودداری کنند .
به عنوان مثال، وقتی دو صفحه document.domain
را تنظیم میکنند، میتوانند وانمود کنند که یک منبع هستند. این به ویژه زمانی که این صفحات از یک سرویس میزبانی مشترک با زیر دامنه های مختلف استفاده می کنند بسیار مهم است. تنظیم document.domain
دسترسی به سایر سایتهای میزبانی شده توسط همان سرویس را باز میکند، که دسترسی مهاجمان به سایتهای شما را آسانتر میکند. این امکان پذیر است زیرا document.domain
قسمت شماره پورت دامنه را نادیده می گیرد.
برای کسب اطلاعات بیشتر در مورد مفاهیم امنیتی تنظیم document.domain
، صفحه "Document.domain" را در MDN بخوانید.
سازگاری با مرورگر
- مشخصات HTML بیان می کند که این ویژگی باید حذف شود.
- موزیلا غیرفعال کردن
document.domain
بهطور پیشفرض ارزش نمونهسازی میداند . - WebKit نشان داد که آنها نسبت به منسوخ کردن تنظیمکننده
document.domain
نسبتاً مثبت هستند . - بحث با سایر فروشندگان مرورگر
- WHATWG / گروه کاری HTML درخواست کشش (تجربه آزمایشی در انتظار)
چگونه بفهمم سایت من تحت تاثیر قرار گرفته است؟
اگر وبسایت شما تحت تأثیر این تغییر قرار گیرد، Chrome در پانل مشکلات DevTools به شما هشدار میدهد — این هشدار در سال 2022 اضافه شده است. به پرچم زرد بالای سمت راست DevTools توجه کنید.
همچنین میتوانید سایت خود را از طریق ممیزی API منسوخ شده LightHouse اجرا کنید تا همه APIهایی را که قرار است از Chrome حذف شوند، پیدا کنید.
اگر گزارش API را راهاندازی کردهاید، Chrome گزارشهای منسوخ شدن را برای شما ارسال کرده است تا شما را از این منسوخ شدن آینده مطلع کند. درباره نحوه استفاده از Reporting API با خدمات جمعآوری گزارشهای موجود یا با ساخت راهحل داخلی خود، بیشتر بیاموزید.
چگونه می توانم این تغییر را در عمل ببینم؟
این تغییر به تدریج از Chrome 115 شروع میشود. برای مشاهده عملکرد این تغییر حتی اگر قبلاً در مرورگر کروم شما منتشر نشده باشد، میتوانید آن را به صورت زیر روشن کنید:
-
chrome://flags/#origin-agent-cluster-default
را باز کنید - Enable را انتخاب کنید.
- کروم را مجددا راه اندازی کنید.
از چه جایگزین هایی می توانم استفاده کنم؟
بهترین گزینه این است که به هیچ وجه document.domain
تغییر ندهید، برای مثال با میزبانی صفحه و همه فریم های تشکیل دهنده در یک مبدا. این در تمام نسخه های همه مرورگرها کار می کند. اما این ممکن است نیاز به کار مجدد قابل توجهی از یک برنامه داشته باشد، بنابراین ارزش آن را دارد که به جایگزین هایی نیز نگاه کنیم که همچنان از دسترسی های متقاطع پشتیبانی می کنند.
به جای document.domain
از postMessage()
یا Channel Messaging API استفاده کنید
در بیشتر موارد استفاده، postMessage()
cross-origin یا Channel Messaging API میتواند جایگزین document.domain
شود.
در مثال زیر:
-
https://parent.example.com
ازhttps://video.example.com
در iframe درخواست می کند تا با ارسال پیام از طریقpostMessage()
DOM را دستکاری کند. -
https://video.example.com
به محض دریافت پیام، DOM را دستکاری می کند و موفقیت را به والدین اطلاع می دهد. -
https://parent.example.com
موفقیت را تصدیق می کند.
در https://parent.example.com
:
// Send a message to https://video.example.com
iframe.postMessage('Request DOM manipulation', 'https://video.example.com');
// Receive messages
iframe.addEventListener('message', (event) => {
// Reject all messages except ones from https://video.example.com
if (event.origin !== 'https://video.example.com') return;
// Filter success messages
if (event.data === 'succeeded') {
// DOM manipulation is succeeded
}
});
در https://video.example.com
:
// Receive messages
window.addEventListener('message', (event) => {
// Reject all messages except ones from https://parent.example.com
if (event.origin !== 'https://parent.example.com') return;
// Do a DOM manipulation on https://video.example.com.
// Send a success message to https://parent.example.com
event.source.postMessage('succeeded', event.origin);
});
آن را امتحان کنید و ببینید چگونه کار می کند. اگر شرایط خاصی دارید که با postMessage()
یا Channel Messaging API کار نمیکند، در Twitter از طریق ChromiumDev@ به ما اطلاع دهید یا در Stack Overflow با یک برچسب document.domain
سؤال کنید.
به عنوان آخرین راه حل، سرصفحه Origin-Agent-Cluster: ?0
را ارسال کنید
اگر دلایل محکمی برای ادامه تنظیم document.domain
دارید، می توانید سرصفحه پاسخ Origin-Agent-Cluster: ?0
به همراه سند هدف ارسال کنید.
Origin-Agent-Cluster: ?0
سرصفحه Origin-Agent-Cluster
به مرورگر دستور می دهد که آیا سند باید توسط کلاستر عامل با کلید اصلی مدیریت شود یا خیر. برای کسب اطلاعات بیشتر درباره Origin-Agent-Cluster
، درخواست جداسازی عملکرد با سرصفحه Origin-Agent-Cluster
بخوانید.
وقتی این هدر را ارسال میکنید، سند شما میتواند به تنظیم document.domain
ادامه دهد، حتی پس از اینکه بهطور پیشفرض تغییرناپذیر شد.
تمام اسناد دیگری که به این رفتار نیاز دارند نیز باید یک Origin-Agent-Cluster
ارسال کنند (توجه داشته باشید که اگر فقط یک سند آن را تنظیم کند document.domain
تأثیری ندارد).
OriginAgentClusterDefaultEnabled
برای خط مشی سازمانی پیکربندی کنید
اختیاری، سرپرست شما میتواند خطمشی OriginAgentClusterDefaultEnabled
را روی false
پیکربندی کند تا document.domain
بهطور پیشفرض در نمونههای Chrome در سراسر سازمان شما قابل تنظیم باشد. برای کسب اطلاعات بیشتر، فهرست و مدیریت خطمشی Chrome Enterprise | مستندات .
منابع
-
Document.domain
- Web API | MDN - Origin Isolation و Deprecating
document.domain
- در حال منسوخ شدن
document.domain
. · شماره 564 · w3ctag/design-reviews
قدردانی
عکس از فینان اکبر در Unsplash
،اگر وب سایت شما به تنظیم document.domain متکی است، اقدام شما ضروری است.
چه چیزی در حال تغییر است و چرا؟
از Chrome 115 ، وبسایتها نمیتوانند document.domain
تنظیم کنند: Chrome document.domain
غیرقابل تغییر میکند. برای برقراری ارتباط با مبدا متقابل، باید از رویکردهای جایگزین، مانند postMessage()
یا Channel Messaging API استفاده کنید.
توجه داشته باشید که این تغییر به تدریج اعمال خواهد شد.
ما انتظار داریم مرورگرهای دیگر در نهایت این قابلیت را منسوخ کرده و حذف کنند. برای جزئیات، بخش سازگاری مرورگر را مرور کنید.
چرا document.domain
تغییرناپذیر کنیم؟
document.domain
برای دریافت یا تنظیم نام میزبان مبدا طراحی شده است. بسیاری از وبسایتها document.domain
تنظیم میکنند تا امکان ارتباط بین صفحات همسایت اما متقاطع را فراهم کنند.
در حالی که این یک تکنیک راحت است، اما یک خطر امنیتی را معرفی می کند، زیرا سیاست همان مبدأ را کاهش می دهد . نگرانی های امنیتی در مورد document.domain
منجر به تغییر در مشخصات شده است که به کاربران هشدار می دهد از استفاده از آن خودداری کنند .
در جزئیات: چرا document.domain را تغییرناپذیر کنیم؟
چگونه document.domain
امروزه استفاده می شود
بسیاری از وبسایتها document.domain
تنظیم میکنند تا امکان ارتباط بین صفحات همسایت اما متقاطع را فراهم کنند.
سایت های یکسان اما متقاطع دارای eTLD+1 یکسان اما زیردامنه های متفاوت هستند.
در اینجا نحوه استفاده از document.domain
تا کنون آمده است:
فرض کنید صفحهای در https://parent.example.com
یک صفحه iframe را از https://video.example.com
جاسازی میکند. این صفحات دارای eTLD+1 یکسان ( example.com
) با زیر دامنه های مختلف هستند. هنگامی که هر دو صفحه document.domain
روی 'example.com'
تنظیم می شود، مرورگر با دو مبدا به گونه ای برخورد می کند که گویی یک منبع هستند.
document.domain
را برای https://parent.example.com
تنظیم کنید:
// Confirm the current origin of "parent.example.com"
console.log(document.domain);
// Set the document.domain
document.domain = 'example.com';
console.log(document.domain);
document.domain
را برای https://video.example.com
تنظیم کنید:
// Confirm the current origin of "video.example.com"
console.log(document.domain);
// Set the document.domain
document.domain = 'example.com';
console.log(document.domain);
اکنون می توانید در https://parent.example.com
در مقابل https://video.example.com
یک دستکاری DOM با منبع متقاطع ایجاد کنید.
وبسایتها document.domain
تنظیم میکنند تا امکان ارتباط آسانتر اسناد همان سایت را فراهم کنند. از آنجایی که این تغییر خط مشی مبدا یکسان را کاهش می دهد ، صفحه اصلی می تواند به سند iframe دسترسی داشته باشد و درخت DOM را طی کند و بالعکس.
این یک تکنیک راحت است، با این حال یک خطر امنیتی را معرفی می کند.
نگرانی های امنیتی با document.domain
نگرانی های امنیتی در مورد document.domain
منجر به تغییر در مشخصات شده است که به کاربران هشدار می دهد از استفاده از آن خودداری کنند .
به عنوان مثال، وقتی دو صفحه document.domain
را تنظیم میکنند، میتوانند وانمود کنند که یک منبع هستند. این به ویژه زمانی که این صفحات از یک سرویس میزبانی مشترک با زیر دامنه های مختلف استفاده می کنند بسیار مهم است. تنظیم document.domain
دسترسی به سایر سایتهای میزبانی شده توسط همان سرویس را باز میکند، که دسترسی مهاجمان به سایتهای شما را آسانتر میکند. این امکان پذیر است زیرا document.domain
قسمت شماره پورت دامنه را نادیده می گیرد.
برای کسب اطلاعات بیشتر در مورد مفاهیم امنیتی تنظیم document.domain
، صفحه "Document.domain" را در MDN بخوانید.
سازگاری با مرورگر
- مشخصات HTML بیان می کند که این ویژگی باید حذف شود.
- موزیلا غیرفعال کردن
document.domain
بهطور پیشفرض ارزش نمونهسازی میداند . - WebKit نشان داد که آنها نسبت به منسوخ کردن تنظیمکننده
document.domain
نسبتاً مثبت هستند . - بحث با سایر فروشندگان مرورگر
- WHATWG / گروه کاری HTML درخواست کشش (تجربه آزمایشی در انتظار)
چگونه بفهمم سایت من تحت تاثیر قرار گرفته است؟
اگر وبسایت شما تحت تأثیر این تغییر قرار گیرد، Chrome در پانل مشکلات DevTools به شما هشدار میدهد — این هشدار در سال 2022 اضافه شده است. به پرچم زرد بالای سمت راست DevTools توجه کنید.
همچنین میتوانید سایت خود را از طریق ممیزی API منسوخ شده LightHouse اجرا کنید تا همه APIهایی را که قرار است از Chrome حذف شوند، پیدا کنید.
اگر گزارش API را راهاندازی کردهاید، Chrome گزارشهای منسوخ شدن را برای شما ارسال کرده است تا شما را از این منسوخ شدن آینده مطلع کند. درباره نحوه استفاده از Reporting API با خدمات جمعآوری گزارشهای موجود یا با ساخت راهحل داخلی خود، بیشتر بیاموزید.
چگونه می توانم این تغییر را در عمل ببینم؟
این تغییر به تدریج از Chrome 115 شروع میشود. برای مشاهده عملکرد این تغییر حتی اگر قبلاً در مرورگر کروم شما منتشر نشده باشد، میتوانید آن را به صورت زیر روشن کنید:
-
chrome://flags/#origin-agent-cluster-default
را باز کنید - Enable را انتخاب کنید.
- کروم را مجددا راه اندازی کنید.
از چه جایگزین هایی می توانم استفاده کنم؟
بهترین گزینه این است که به هیچ وجه document.domain
تغییر ندهید، برای مثال با میزبانی صفحه و همه فریم های تشکیل دهنده در یک مبدا. این در تمام نسخه های همه مرورگرها کار می کند. اما این ممکن است نیاز به کار مجدد قابل توجهی از یک برنامه داشته باشد، بنابراین ارزش آن را دارد که به جایگزین هایی نیز نگاه کنیم که همچنان از دسترسی های متقاطع پشتیبانی می کنند.
به جای document.domain
از postMessage()
یا Channel Messaging API استفاده کنید
در بیشتر موارد استفاده، postMessage()
cross-origin یا Channel Messaging API میتواند جایگزین document.domain
شود.
در مثال زیر:
-
https://parent.example.com
ازhttps://video.example.com
در iframe درخواست می کند تا با ارسال پیام از طریقpostMessage()
DOM را دستکاری کند. -
https://video.example.com
به محض دریافت پیام، DOM را دستکاری می کند و موفقیت را به والدین اطلاع می دهد. -
https://parent.example.com
موفقیت را تصدیق می کند.
در https://parent.example.com
:
// Send a message to https://video.example.com
iframe.postMessage('Request DOM manipulation', 'https://video.example.com');
// Receive messages
iframe.addEventListener('message', (event) => {
// Reject all messages except ones from https://video.example.com
if (event.origin !== 'https://video.example.com') return;
// Filter success messages
if (event.data === 'succeeded') {
// DOM manipulation is succeeded
}
});
در https://video.example.com
:
// Receive messages
window.addEventListener('message', (event) => {
// Reject all messages except ones from https://parent.example.com
if (event.origin !== 'https://parent.example.com') return;
// Do a DOM manipulation on https://video.example.com.
// Send a success message to https://parent.example.com
event.source.postMessage('succeeded', event.origin);
});
آن را امتحان کنید و ببینید چگونه کار می کند. اگر شرایط خاصی دارید که با postMessage()
یا Channel Messaging API کار نمیکند، در Twitter از طریق ChromiumDev@ به ما اطلاع دهید یا در Stack Overflow با یک برچسب document.domain
سؤال کنید.
به عنوان آخرین راه حل، سرصفحه Origin-Agent-Cluster: ?0
را ارسال کنید
اگر دلایل محکمی برای ادامه تنظیم document.domain
دارید، می توانید سرصفحه پاسخ Origin-Agent-Cluster: ?0
به همراه سند هدف ارسال کنید.
Origin-Agent-Cluster: ?0
سرصفحه Origin-Agent-Cluster
به مرورگر دستور می دهد که آیا سند باید توسط کلاستر عامل با کلید اصلی مدیریت شود یا خیر. برای کسب اطلاعات بیشتر درباره Origin-Agent-Cluster
، درخواست جداسازی عملکرد با سرصفحه Origin-Agent-Cluster
بخوانید.
هنگامی که این هدر را ارسال می کنید، سند شما می تواند به تنظیم document.domain
ادامه دهد، حتی پس از اینکه به طور پیش فرض تغییر ناپذیر شود.
تمام اسناد دیگری که به این رفتار نیاز دارند نیز باید یک Origin-Agent-Cluster
ارسال کنند (توجه داشته باشید که اگر فقط یک سند آن را تنظیم کند document.domain
تأثیری ندارد).
OriginAgentClusterDefaultEnabled
برای خط مشی سازمانی پیکربندی کنید
اختیاری، سرپرست شما میتواند خطمشی OriginAgentClusterDefaultEnabled
را روی false
پیکربندی کند تا document.domain
بهطور پیشفرض در نمونههای Chrome در سراسر سازمان شما قابل تنظیم باشد. برای کسب اطلاعات بیشتر، فهرست و مدیریت خطمشی Chrome Enterprise | مستندات .
منابع
-
Document.domain
- Web API | MDN - Origin Isolation و Deprecating
document.domain
- در حال منسوخ شدن
document.domain
. · شماره 564 · w3ctag/design-reviews
قدردانی
عکس از فینان اکبر در Unsplash
،اگر وب سایت شما به تنظیم document.domain متکی است، اقدام شما ضروری است.
چه چیزی در حال تغییر است و چرا؟
از Chrome 115 ، وبسایتها نمیتوانند document.domain
تنظیم کنند: Chrome document.domain
غیرقابل تغییر میکند. برای برقراری ارتباط با مبدا متقابل، باید از رویکردهای جایگزین، مانند postMessage()
یا Channel Messaging API استفاده کنید.
توجه داشته باشید که این تغییر به تدریج اعمال خواهد شد.
ما انتظار داریم مرورگرهای دیگر در نهایت این قابلیت را منسوخ کرده و حذف کنند. برای جزئیات، بخش سازگاری مرورگر را مرور کنید.
چرا document.domain
تغییرناپذیر کنیم؟
document.domain
برای دریافت یا تنظیم نام میزبان مبدا طراحی شده است. بسیاری از وبسایتها document.domain
تنظیم میکنند تا امکان ارتباط بین صفحات همسایت اما متقاطع را فراهم کنند.
در حالی که این یک تکنیک راحت است، اما یک خطر امنیتی را معرفی می کند، زیرا سیاست همان مبدأ را کاهش می دهد . نگرانی های امنیتی در مورد document.domain
منجر به تغییر در مشخصات شده است که به کاربران هشدار می دهد از استفاده از آن خودداری کنند .
در جزئیات: چرا document.domain را تغییرناپذیر کنیم؟
چگونه document.domain
امروزه استفاده می شود
بسیاری از وبسایتها document.domain
تنظیم میکنند تا امکان ارتباط بین صفحات همسایت اما متقاطع را فراهم کنند.
سایت های یکسان اما متقاطع دارای eTLD+1 یکسان اما زیردامنه های متفاوت هستند.
در اینجا نحوه استفاده از document.domain
تا کنون آمده است:
فرض کنید صفحهای در https://parent.example.com
یک صفحه iframe را از https://video.example.com
جاسازی میکند. این صفحات دارای eTLD+1 یکسان ( example.com
) با زیر دامنه های مختلف هستند. هنگامی که هر دو صفحه document.domain
روی 'example.com'
تنظیم می شود، مرورگر با دو مبدا به گونه ای برخورد می کند که گویی یک منبع هستند.
document.domain
را برای https://parent.example.com
تنظیم کنید:
// Confirm the current origin of "parent.example.com"
console.log(document.domain);
// Set the document.domain
document.domain = 'example.com';
console.log(document.domain);
document.domain
را برای https://video.example.com
تنظیم کنید:
// Confirm the current origin of "video.example.com"
console.log(document.domain);
// Set the document.domain
document.domain = 'example.com';
console.log(document.domain);
اکنون می توانید در https://parent.example.com
در مقابل https://video.example.com
یک دستکاری DOM با منبع متقاطع ایجاد کنید.
وبسایتها document.domain
تنظیم میکنند تا امکان ارتباط آسانتر اسناد همان سایت را فراهم کنند. از آنجایی که این تغییر خط مشی مبدا یکسان را کاهش می دهد ، صفحه اصلی می تواند به سند iframe دسترسی داشته باشد و درخت DOM را طی کند و بالعکس.
این یک تکنیک راحت است، با این حال یک خطر امنیتی را معرفی می کند.
نگرانی های امنیتی با document.domain
نگرانی های امنیتی در مورد document.domain
منجر به تغییر در مشخصات شده است که به کاربران هشدار می دهد از استفاده از آن خودداری کنند .
به عنوان مثال، وقتی دو صفحه document.domain
را تنظیم میکنند، میتوانند وانمود کنند که یک منبع هستند. این به ویژه زمانی که این صفحات از یک سرویس میزبانی مشترک با زیر دامنه های مختلف استفاده می کنند بسیار مهم است. تنظیم document.domain
دسترسی به سایر سایتهای میزبانی شده توسط همان سرویس را باز میکند، که دسترسی مهاجمان به سایتهای شما را آسانتر میکند. این امکان پذیر است زیرا document.domain
قسمت شماره پورت دامنه را نادیده می گیرد.
برای کسب اطلاعات بیشتر در مورد مفاهیم امنیتی تنظیم document.domain
، صفحه "Document.domain" را در MDN بخوانید.
سازگاری با مرورگر
- مشخصات HTML بیان می کند که این ویژگی باید حذف شود.
- موزیلا غیرفعال کردن
document.domain
بهطور پیشفرض ارزش نمونهسازی میداند . - WebKit نشان داد که آنها نسبت به منسوخ کردن تنظیمکننده
document.domain
نسبتاً مثبت هستند . - بحث با سایر فروشندگان مرورگر
- WHATWG / گروه کاری HTML درخواست کشش (تجربه آزمایشی در انتظار)
چگونه بفهمم سایت من تحت تاثیر قرار گرفته است؟
اگر وبسایت شما تحت تأثیر این تغییر قرار گیرد، Chrome در پانل مشکلات DevTools به شما هشدار میدهد — این هشدار در سال 2022 اضافه شده است. به پرچم زرد بالای سمت راست DevTools توجه کنید.
همچنین میتوانید سایت خود را از طریق ممیزی API منسوخ شده LightHouse اجرا کنید تا همه APIهایی را که قرار است از Chrome حذف شوند، پیدا کنید.
اگر گزارش API را راهاندازی کردهاید، Chrome گزارشهای منسوخ شدن را برای شما ارسال کرده است تا شما را از این منسوخ شدن آینده مطلع کند. درباره نحوه استفاده از Reporting API با خدمات جمعآوری گزارشهای موجود یا با ساخت راهحل داخلی خود، بیشتر بیاموزید.
چگونه می توانم این تغییر را در عمل ببینم؟
این تغییر به تدریج از Chrome 115 شروع میشود. برای مشاهده عملکرد این تغییر حتی اگر قبلاً در مرورگر کروم شما منتشر نشده باشد، میتوانید آن را به صورت زیر روشن کنید:
-
chrome://flags/#origin-agent-cluster-default
را باز کنید - Enable را انتخاب کنید.
- کروم را مجددا راه اندازی کنید.
از چه جایگزین هایی می توانم استفاده کنم؟
بهترین گزینه این است که به هیچ وجه document.domain
تغییر ندهید، برای مثال با میزبانی صفحه و همه فریم های تشکیل دهنده در یک مبدا. این در تمام نسخه های همه مرورگرها کار می کند. اما این ممکن است نیاز به کار مجدد قابل توجهی از یک برنامه داشته باشد، بنابراین ارزش آن را دارد که به جایگزین هایی نیز نگاه کنیم که همچنان از دسترسی های متقاطع پشتیبانی می کنند.
به جای document.domain
از postMessage()
یا Channel Messaging API استفاده کنید
در بیشتر موارد استفاده، postMessage()
cross-origin یا Channel Messaging API میتواند جایگزین document.domain
شود.
در مثال زیر:
-
https://parent.example.com
ازhttps://video.example.com
در iframe درخواست می کند تا با ارسال پیام از طریقpostMessage()
DOM را دستکاری کند. -
https://video.example.com
به محض دریافت پیام، DOM را دستکاری می کند و موفقیت را به والدین اطلاع می دهد. -
https://parent.example.com
موفقیت را تصدیق می کند.
در https://parent.example.com
:
// Send a message to https://video.example.com
iframe.postMessage('Request DOM manipulation', 'https://video.example.com');
// Receive messages
iframe.addEventListener('message', (event) => {
// Reject all messages except ones from https://video.example.com
if (event.origin !== 'https://video.example.com') return;
// Filter success messages
if (event.data === 'succeeded') {
// DOM manipulation is succeeded
}
});
در https://video.example.com
:
// Receive messages
window.addEventListener('message', (event) => {
// Reject all messages except ones from https://parent.example.com
if (event.origin !== 'https://parent.example.com') return;
// Do a DOM manipulation on https://video.example.com.
// Send a success message to https://parent.example.com
event.source.postMessage('succeeded', event.origin);
});
آن را امتحان کنید و ببینید چگونه کار می کند. اگر شرایط خاصی دارید که با postMessage()
یا Channel Messaging API کار نمیکند، در Twitter از طریق ChromiumDev@ به ما اطلاع دهید یا در Stack Overflow با یک برچسب document.domain
سؤال کنید.
به عنوان آخرین راه حل، سرصفحه Origin-Agent-Cluster: ?0
را ارسال کنید
اگر دلایل محکمی برای ادامه تنظیم document.domain
دارید، می توانید سرصفحه پاسخ Origin-Agent-Cluster: ?0
به همراه سند هدف ارسال کنید.
Origin-Agent-Cluster: ?0
سرصفحه Origin-Agent-Cluster
به مرورگر دستور می دهد که آیا سند باید توسط کلاستر عامل با کلید اصلی مدیریت شود یا خیر. برای کسب اطلاعات بیشتر درباره Origin-Agent-Cluster
، درخواست جداسازی عملکرد با سرصفحه Origin-Agent-Cluster
بخوانید.
هنگامی که این هدر را ارسال می کنید، سند شما می تواند به تنظیم document.domain
ادامه دهد، حتی پس از اینکه به طور پیش فرض تغییر ناپذیر شود.
تمام اسناد دیگری که به این رفتار نیاز دارند نیز باید یک Origin-Agent-Cluster
ارسال کنند (توجه داشته باشید که اگر فقط یک سند آن را تنظیم کند document.domain
تأثیری ندارد).
OriginAgentClusterDefaultEnabled
برای خط مشی سازمانی پیکربندی کنید
اختیاری، سرپرست شما میتواند خطمشی OriginAgentClusterDefaultEnabled
را روی false
پیکربندی کند تا document.domain
بهطور پیشفرض در نمونههای Chrome در سراسر سازمان شما قابل تنظیم باشد. برای کسب اطلاعات بیشتر، فهرست و مدیریت خطمشی Chrome Enterprise | مستندات .
منابع
-
Document.domain
- Web API | MDN - Origin Isolation و Deprecating
document.domain
- در حال منسوخ شدن
document.domain
. · شماره 564 · w3ctag/design-reviews
قدردانی
عکس از فینان اکبر در Unsplash