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