متطلبات جديدة لواجهة برمجة التطبيقات 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>

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