متطلبات جديدة لواجهة برمجة التطبيقات Web Share API في إطارات iframe التابعة لجهات خارجية

لتحسين الخصوصية والأمان، يجب الآن السماح صراحةً بطلبات Web Share API في إطارات iframe التابعة لجهات خارجية.

تتناول هذه المقالة تغييرًا قد يؤدي إلى إيقاف الخدمة في Web Share API. تم إجراء هذا التغيير في Firefox، وسيتم طرحه في Chrome اعتبارًا من الإصدار 110، ومن المتوقّع أن يظهر في Safari قريبًا.

تتيح لك واجهة برمجة التطبيقات Web Share API مشاركة النصوص أو عناوين URL أو الملفات. في أبسط أشكاله، يبدو رمز المشاركة على النحو التالي:

try {
  await navigator.share({
    title: 'Title',
    text: 'Text',
    url: location.href,
  });
} catch (err) {
  console.error(`${err.name}: ${err.message}`);
}

إذا كان يجب تنفيذ إجراء المشاركة في إطار iframe تابع لجهة خارجية، يتطلب منك التغيير الحديث في المواصفات السماح بالعملية بشكل صريح. يمكنك إجراء ذلك من خلال إضافة سمة allow إلى العلامة <iframe> مع قيمة web-share. يُعلم هذا المتصفّح بأنّ الموقع الإلكتروني الذي يتمّ تضمين المحتوى فيه يسمح لإطار iframe المضمّن التابع لجهة خارجية بتنفيذ إجراء المشاركة.

<!DOCTYPE html>
<html lang="en">
  <body>
    <h1>Web Share in third-party iframes</h1>
    <!-- The embedding page is hosted on https://example.com/index.html. -->
    <iframe allow="web-share" src="https://third-party.example.com/iframe.html"></iframe>
  </body>
</html>

يمكنك الاطّلاع على هذا الإجراء عمليًا في العرض التجريبي على Glitch والاطّلاع على رمز المصدر. سيؤدي عدم تقديم السمة إلى ظهور NotAllowedError مع الرسالة التالية: Failed to execute 'share' on 'Navigator': Permission denied. وقد وافق جميع مورّدي المتصفّحات على هذا التقييد لتحسين خصوصية المستخدمين وأمانه ومنع الجهات المسيئة، مثل الإعلانات المسيئة، من اتّخاذ إجراءات مشاركة غير متوقّعة.