Apps Komut Dosyası, belirli durumlarda Google Workspace uygulamaları için koruyucu izolasyon sağlamak amacıyla güvenlik korumalı alanı kullanır. IFRAME
dışındaki tüm
sandbox modları artık kullanılamıyor. Eski sanal alan modlarını kullanan uygulamalar artık daha yeni olan IFRAME
modunu otomatik olarak kullanıyor.
HTML hizmetiyle bu eski modları daha önce kullanan uygulamaların, aşağıdaki farklılıkları gidermek için IFRAME
modunda değişiklik yapması gerekebilir:
- Artık
target="_top"
veyatarget="_blank"
kullanarak bağlantınıntarget
özelliğini geçersiz kılmanız gerekir. - HTML Hizmeti tarafından sunulan HTML dosyaları <!DOCTYPE html>, <html> ve <body> etiketlerini içermelidir.
- Google'ın yerel yükleyici kitaplığı
api.js
,IFRAME
modunda otomatik olarak yüklenmiyor - Seçici kullanıcılarının
setOrigin()
numaralı telefonu araması gerekiyor. Bunun nedeni, içeriğin yeni bir alandan sunulmasıdır. - IE9 gibi bazı eski tarayıcılar desteklenmez.
- İçe aktarılan kaynaklar artık HTTPS kullanmalıdır
- Form gönderimleri artık varsayılan olarak engellenmiyor
Bu farklılıklar aşağıdaki bölümlerde ayrıntılı olarak açıklanmıştır.
Bağlantı hedefi özelliğini ayarlama
IFRAME
modunda, bağlantı hedefi özelliğini _top
veya _blank
olarak ayarlamanız gerekir:
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>
Ayrıca, bu özelliği içeren web sayfasının head bölümündeki <base> etiketini kullanarak da geçersiz kılabilirsiniz:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
Üst düzey HTML etiketleri
NATIVE
(ve EMULATED
) korumalı alan modunda, belirli HTML etiketleri bir Apps Komut Dosyası .html dosyasına otomatik olarak eklenir ancak IFRAME
modu kullanılırken bu durum söz konusu değildir.
Proje sayfalarınızın IFRAME
kullanılarak doğru şekilde sunulmasını sağlamak için sayfa içeriğinizi aşağıdaki üst düzey etiketlerle sarmalayın:
<!DOCTYPE html>
<html>
<body>
<!-- Add your HTML content here -->
</body>
</html>
Yerel JavaScript yükleyici kitaplığı açıkça yüklenmelidir.
Yerel yükleyici kitaplığının otomatik olarak yüklenmesine dayanan komut dosyaları api.js
bu kitaplığı aşağıdaki örnekte olduğu gibi açıkça yükleyecek şekilde değiştirilmelidir:
<script src="https://apis.google.com/js/api.js?onload=onApiLoad">
</script>
Google Picker API değişikliği
Google Picker API'yi kullanırken artık PickerBuilder'ı oluştururken setOrigin()
işlevini çağırmanız ve aşağıdaki örnekte gösterildiği gibi kaynağı google.script.host.origin
iletmeniz gerekir:
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);
}
Çalışan tam bir örnek için Dosya açma iletişim kutuları başlıklı makaleye bakın.
Tarayıcı desteği
IFRAME
Korumalı alan modu, HTML5'teki iframe korumalı alan özelliğine dayanır.
Bu özellik, Internet Explorer 9 gibi bazı eski tarayıcılarda desteklenmez. Apps Komut Dosyası projeniz hem:
HtmlService
kullanılıyorsa ve- Daha önce kullanılmış
EMULATED
veyaNATIVE
sanal alanı
Bu uygulamaların IFRAME
korumalı alan moduna taşınması, HTML5'in iframe korumalı alan özelliğini desteklemeyen bazı eski tarayıcılarda (özellikle IE9 ve önceki sürümler) artık çalışmayabileceği anlamına gelir.
IFRAME
modunu zaten isteyen veya IFRAME
modunu hiç kullanmayan uygulamalar bu sorundan etkilenmez.HtmlService
İçe aktarılan kaynaklar için artık HTTPS gereklidir
Kaynakları HTTP kullanarak içe aktaran önceki uygulamalar, bunun yerine HTTPS kullanacak şekilde değiştirilmelidir.
Form gönderimleri artık varsayılan olarak engellenmiyor
NATIVE
altında, HTML formlarının gönderilmesi ve sayfada gezinilmesi engelleniyordu. Bu nedenle, geliştiriciler gönder düğmesine onclick
bir işleyici ekleyebilir ve sonrasında ne olacağı konusunda endişelenmek zorunda kalmaz.
Ancak IFRAME
modunda HTML formlarının gönderilmesine izin verilir ve bir form öğesinde action
özelliği belirtilmemişse boş bir sayfaya gönderilir.
Daha da kötüsü, onclick
işleyici tamamlanmadan önce iç iFrame boş sayfaya yönlendirilir.
Çözüm olarak, form öğelerinin gönderilmesini engelleyen bir JavaScript kodu ekleyerek tıklama işleyicilerin çalışması için zaman tanıyabilirsiniz:
<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>
Tam bir örneği HtmlService kılavuzundaki İstemciden Sunucuya İletişim bölümünde bulabilirsiniz.