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

لتحسين الخصوصية والأمان، يجب الآن السماح صراحةً باستدعاءات واجهة برمجة التطبيقات لمشاركة الويب في إطارات iframe التابعة لجهات خارجية.

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

تتيح لك واجهة برمجة تطبيقات "المشاركة على الويب" مشاركة النص أو عناوين 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. وقد وافق جميع مورّدي المتصفحات على هذا التقييد بهدف تحسين خصوصية المستخدمين وأمانهم ولمنع الجهات المسيئة، مثل الإعلانات المسيئة، من تشغيل إجراءات مشاركة غير متوقّعة.