एचटीएमएल सेवा: पाबंदियां

उपयोगकर्ताओं को नुकसान पहुंचाने वाले एचटीएमएल या JavaScript से बचाने के लिए, Apps Script, एचटीएमएल-सेवा वाले वेब ऐप्लिकेशन या Google Docs, Sheets, और फ़ॉर्म के लिए कस्टम यूज़र इंटरफ़ेस को सैंडबॉक्स करने के लिए iframe का इस्तेमाल करता है. (एचटीएमएल सेवा, किसी ईमेल का मुख्य हिस्सा जनरेट करने जैसी अन्य स्थितियों में सैंडबॉक्स का इस्तेमाल नहीं करती.) सैंडबॉक्स, क्लाइंट-साइड कोड पर पाबंदियां लगाता है.

सैंडबॉक्स मोड

IFRAME को छोड़कर, अब सभी सैंडबॉक्स मोड बंद कर दिए गए हैं. पुराने सैंडबॉक्स मोड का इस्तेमाल करने वाले ऐप्लिकेशन, अब नए IFRAME मोड का इस्तेमाल अपने-आप करते हैं. अगर आपके पास ऐसी स्क्रिप्ट हैं जिन्हें पुराने मोड (NATIVE और EMULATED) का इस्तेमाल करके डेवलप किया गया था, तो आपको माइग्रेशन के निर्देशों का पालन करना चाहिए. इससे यह पक्का किया जा सकेगा कि वे IFRAME मोड में सही तरीके से काम करें.

setSandboxMode तरीका कॉल करने पर, अब इसका कोई असर नहीं पड़ता.

IFRAME मोड में पाबंदियां

IFRAME सैंडबॉक्स मोड, एचटीएमएल5 में iframe सैंडबॉक्सिंग सुविधा पर आधारित है. इसके लिए, इन कीवर्ड का इस्तेमाल किया जाता है:

allow-top-navigation कीवर्ड पर पाबंदी लगी हुई है. इसकी मदद से, कॉन्टेंट को टॉप-लेवल ब्राउज़िंग कॉन्टेक्स्ट पर नेविगेट किया जा सकता है. साथ ही, इसे सैंडबॉक्स में एट्रिब्यूट के तौर पर सेट नहीं किया जा सकता. अगर आपको अपनी स्क्रिप्ट को रीडायरेक्ट करना है, तो उपयोगकर्ता के लिए कोई लिंक या बटन जोड़ें, ताकि वह उस पर कार्रवाई कर सके.

IFRAME मोड में, आपको लिंक टारगेट एट्रिब्यूट को _top या _blank पर सेट करना होगा:

Code.js

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

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>

ऐक्टिव कॉन्टेंट के लिए एचटीटीपीएस ज़रूरी है

स्क्रिप्ट, एक्सटर्नल स्टाइलशीट, और XmlHttpRequest जैसे "ऐक्टिव" कॉन्टेंट को एचटीटीपी के बजाय एचटीटीपीएस पर लोड किया जाना चाहिए.