IFRAME স্যান্ডবক্স মোডে স্থানান্তরিত হচ্ছে৷

Apps Script নির্দিষ্ট পরিস্থিতিতে Google Workspaceঅ্যাপ্লিকেশনের জন্য সুরক্ষামূলক বিচ্ছিন্নতা প্রদান করতে একটি নিরাপত্তা স্যান্ডবক্স ব্যবহার করে। IFRAME বাদে সমস্ত স্যান্ডবক্স মোড এখন সূর্যাস্ত। পুরানো স্যান্ডবক্স মোড ব্যবহার করা অ্যাপগুলি এখন স্বয়ংক্রিয়ভাবে নতুন IFRAME মোড ব্যবহার করে৷

যে অ্যাপগুলি পূর্বে HTML পরিষেবার সাথে এই পুরানো মোডগুলি ব্যবহার করেছিল তাদের নিম্নলিখিত পার্থক্যগুলি সমাধান করতে IFRAME মোডের জন্য পরিবর্তন করতে হতে পারে:

  • আপনাকে এখন অবশ্যই target="_top" বা target="_blank" ব্যবহার করে লিঙ্কের target অ্যাট্রিবিউট ওভাররাইড করতে হবে
  • 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 ট্যাগ

NATIVE (এবং EMULATED ) স্যান্ডবক্স মোডের অধীনে, নির্দিষ্ট HTML ট্যাগগুলি একটি Apps Script .html ফাইলে স্বয়ংক্রিয়ভাবে যুক্ত হবে, কিন্তু IFRAME মোড ব্যবহার করার সময় এটি ঘটে না৷

আপনার প্রকল্প পৃষ্ঠাগুলি IFRAME ব্যবহার করে সঠিকভাবে পরিবেশন করা হয়েছে তা নিশ্চিত করতে, নিম্নলিখিত শীর্ষ-স্তরের ট্যাগগুলিতে আপনার পৃষ্ঠার বিষয়বস্তু মুড়ে দিন:

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

নেটিভ জাভাস্ক্রিপ্ট লোডার লাইব্রেরি স্পষ্টভাবে লোড করা আবশ্যক

নেটিভ লোডার লাইব্রেরি api.js এর স্বয়ংক্রিয় লোডিং-এর উপর নির্ভরশীল স্ক্রিপ্টগুলিকে এই লাইব্রেরিটি স্পষ্টভাবে লোড করার জন্য পরিবর্তন করতে হবে, যেমন নিম্নলিখিত উদাহরণে:

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

Google পিকার API পরিবর্তন

Google Picker API ব্যবহার করার সময়, PickerBuilder তৈরি করার সময় আপনাকে অবশ্যই 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 স্যান্ডবক্স মোড HTML5-এ iframe স্যান্ডবক্সিং বৈশিষ্ট্যের উপর ভিত্তি করে। এটি কিছু পুরানো ব্রাউজারে সমর্থিত নয়, যেমন Internet Explorer 9। এটি একটি সমস্যা হতে পারে যদি আপনার Apps Script উভয়ই প্রজেক্ট করে:

  • HtmlService ব্যবহার করে, এবং
  • পূর্বে ব্যবহৃত EMULATED বা NATIVE স্যান্ডবক্সিং

এই অ্যাপগুলিকে IFRAME স্যান্ডবক্স মোডে স্থানান্তরিত করার অর্থ হল তারা আর কিছু পুরানো ব্রাউজারে (বিশেষ করে IE9 এবং আগের) কাজ করতে পারে না যা HTML5 এর iframe স্যান্ডবক্সিং বৈশিষ্ট্য সমর্থন করে না৷

যে অ্যাপগুলি ইতিমধ্যেই IFRAME মোডের জন্য অনুরোধ করে বা HtmlService ব্যবহার করে না সেগুলি এই সমস্যা দ্বারা প্রভাবিত হয় না৷

আমদানি করা সংস্থানগুলির জন্য এখন HTTPS প্রয়োজন৷

আগের অ্যাপ্লিকেশানগুলি যেগুলি HTTP ব্যবহার করে সংস্থানগুলি আমদানি করেছে সেগুলিকে পরিবর্তে HTTPS ব্যবহার করতে পরিবর্তন করতে হবে৷

ফরম জমা আর ডিফল্টরূপে প্রতিরোধ করা হয় না

NATIVE স্যান্ডবক্সিংয়ের অধীনে HTML ফর্মগুলিকে প্রকৃতপক্ষে পৃষ্ঠাটি জমা দেওয়া এবং নেভিগেট করা থেকে বাধা দেওয়া হয়েছিল৷ প্রদত্ত, একজন বিকাশকারী সাবমিট বোতামে একটি onclick হ্যান্ডলার যোগ করতে পারে এবং তারপরে কী ঘটেছে তা নিয়ে চিন্তা করতে হবে না।

IFRAME মোডের সাথে তবে HTML ফর্মগুলি জমা দেওয়ার অনুমতি দেওয়া হয়, এবং যদি একটি ফর্ম উপাদানের কোনো action অ্যাট্রিবিউট নির্দিষ্ট না থাকে তবে এটি একটি ফাঁকা পৃষ্ঠায় জমা হবে৷ আরও খারাপ, onclick হ্যান্ডলারের শেষ করার সুযোগ পাওয়ার আগে ভিতরের আইফ্রেমটি ফাঁকা পৃষ্ঠায় পুনঃনির্দেশিত হবে।

সমাধান হল আপনার পৃষ্ঠায় জাভাস্ক্রিপ্ট কোড যোগ করা যা ফর্ম উপাদানগুলিকে আসলে জমা হতে বাধা দেয়, যাতে ক্লিক হ্যান্ডলারদের কাজ করার সময় থাকে:

<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 গাইড ক্লায়েন্ট-টু-সার্ভার কমিউনিকেশনে একটি সম্পূর্ণ উদাহরণ পাওয়া যাবে।