النقل إلى وضع الحماية IFRAME

تستخدم "برمجة التطبيقات" وضع الحماية للأمان لتوفير عزل وقائي عن Google Workspace التطبيقات في مواقف معينة. الكل تم إيقاف أوضاع وضع الحماية الآن باستثناء IFRAME. التطبيقات التي تستخدم وضع حماية قديم تستخدم الآن الأوضاع وضع IFRAME الأحدث تلقائيًا.

قد تحتاج التطبيقات التي سبق لها استخدام هذه الأوضاع القديمة مع خدمة HTML إلى ما يلي: عليك إجراء تغييرات على وضع IFRAME لمعالجة الاختلافات التالية:

  • وعليك الآن إلغاء سمة target للرابط باستخدام السمة target="_top". target="_blank"
  • يجب أن تتضمن ملفات HTML التي تعرضها خدمة HTML <!DOCTYPE html>، و<html>، و<body> العلامات
  • لا يتم تحميل مكتبة أداة التحميل الأصلية من Google api.js تلقائيًا في وضع IFRAME
  • يجب على مستخدمي أداة الاختيار الاتصال بها setOrigin() لأنّه يتم عرض المحتوى من نطاق جديد
  • بعض المتصفحات القديمة، بما في ذلك IE9، غير متوافقة
  • يجب أن تستخدم الموارد المستورَدة بروتوكول HTTPS الآن
  • لم يعُد يتم منع إرسال النماذج تلقائيًا

تم توضيح هذه الاختلافات في الأقسام التالية.

في الوضع IFRAME، عليك ضبط سمة استهداف الرابط على _top أو _blank:

Code.js

function doGet() {
  var template = HtmlService.createTemplateFromFile('top');
  return template.evaluate();
}

top.html

<!DOCTYPE html>
<html>
 <body>
   <div>
     <a href="http://google.com" target="_top">Click Me!</a>
   </div>
 </body>
</html>

يمكنك أيضًا إلغاء هذه السمة باستخدام <base> علامة في الرأس من صفحة الويب المضمنة:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
   <div>
     <a href="http://google.com">Click Me!</a>
   </div>
 </body>
</html>

علامات HTML ذات المستوى الأعلى

في وضع الحماية لـ NATIVEEMULATED)، سيتم تحديد تتم إضافته تلقائيًا إلى ملف .html لبرمجة التطبيقات، ولكن لا يحدث ذلك عندما باستخدام وضع IFRAME.

للتأكّد من عرض صفحات مشروعك بشكل صحيح باستخدام IFRAME، عليك إنهاء محتوى الصفحة بعلامات المستوى الأعلى التالية:

<!DOCTYPE html>
<html>
  <body>
    <!-- Add your HTML content here -->
  </body>
</html>

يجب تحميل مكتبة أداة تحميل JavaScript الأصلية بشكل صريح

النصوص البرمجية التي اعتمدت على التحميل التلقائي لمكتبة برنامج التحميل الأصلي api.js لتحميل هذه المكتبة بشكل صريح، كما في المثال التالي:

<script src="https://apis.google.com/js/api.js?onload=onApiLoad">
</script>

تغيير في Google Picker API

عند استخدام واجهة برمجة تطبيقات Google Picker، يجب عليك الآن استدعاء setOrigin() عند إنشاء المنتقي والممر في المصدر google.script.host.origin، كما هو موضح في المثال التالي:

function createPicker(oauthToken) {
  var picker = new google.picker.PickerBuilder()
      .addView(google.picker.ViewId.SPREADSHEETS) // Or a different ViewId
      .setOAuthToken(oauthToken)
      .setDeveloperKey(developerKey)
      .setCallback(pickerCallback)
      .setOrigin(google.script.host.origin) // Note the setOrigin
      .build();
  picker.setVisible(true);
}

للاطلاع على مثال عملي كامل، راجع مربعات حوار فتح الملفات:

دعم المتصفح

يعتمد وضع الحماية في IFRAME على وضع حماية iframe الجديدة في HTML5. وهذا الإجراء غير متاح في بعض المتصفّحات القديمة، مثل Internet Explorer 9. هذا النمط مشكلة إذا كان مشروع "برمجة تطبيقات Google" يعمل على النحو التالي:

  • يستخدم HtmlService،
  • سبق أن تم استخدام وضع الحماية EMULATED أو NATIVE

يعني نقل بيانات هذه التطبيقات إلى وضع الحماية في IFRAME أنّها قد لا تعمل بعد الآن. بعض المتصفحات القديمة (خصوصًا IE9 والإصدارات الأقدم) التي لا تتوافق مع إطار iframe في HTML5 وضع الحماية.

التطبيقات التي تطلب وضع IFRAME أو لا تستخدم HtmlService على الإطلاق هي لا تتأثر بهذه المشكلة.

يجب الآن استخدام HTTPS للموارد التي يتم استيرادها

يجب تغيير التطبيقات السابقة التي استوردت الموارد باستخدام HTTP إلى استخدام HTTPS بدلاً من ذلك.

لم يعُد يتم منع إرسال النماذج تلقائيًا

ضمن NATIVE، تم منع إرسال نماذج HTML لوضع الحماية بالفعل والتنقل في الصفحة. وبناءً على ذلك، يمكن لمطوِّر البرامج إضافة onclick. زر الإرسال حتى لا تقلق بشأن ما حدث بعد ذلك.

باستخدام الوضع IFRAME، يُسمح بإرسال نماذج HTML وإذا كان النموذج لا يحتوي العنصر على سمة action محددة، فسيتم إرساله إلى صفحة فارغة. والأسوأ من ذلك، أن إطار iframe الداخلي سيعيد التوجيه إلى الصفحة الفارغة قبل onclick. لدى المعالج فرصة لإنهاء العرض.

الحل هو إضافة رمز JavaScript إلى صفحتك لمنع ظهور النموذج من الإرسال الفعلي، بحيث يكون لدى معالِجات النقرات الوقت الدالة:

<script>
  // Prevent forms from submitting.
  function preventFormSubmit() {
    var forms = document.querySelectorAll('form');
    for (var i = 0; i < forms.length; i++) {
      forms[i].addEventListener('submit', function(event) {
        event.preventDefault();
      });
    }
  }
  window.addEventListener('load', preventFormSubmit);
</script>

يمكن العثور على مثال كامل في دليل HtmlService. الاتصال من عميل إلى خادم: