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ının desteği sonlandırıldı. 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,IFRAMEmodunda 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 kaynağı google.script.host.origin iletmeniz gerekir. Bu işlem aşağıdaki örnekte gösterilmiştir:
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:
HtmlServicekullanılıyorsa ve- Daha önce kullanılmış
EMULATEDveyaNATIVEsanal 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 HtmlService kullanmayan uygulamalar bu sorundan etkilenmez.
İç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
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, form öğelerinin gönderilmesini engelleyen bir JavaScript kodu eklemektir. Böylece tıklama işleyiciler çalışmak için yeterli zamana sahip olur:
<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.