Apps Komut Dosyası, belirli durumlarda uygulamalar için koruyucu yalıtım sağlamak amacıyla güvenlik korumalı alanı Google Workspacekullanır. IFRAME
dışındaki tüm korumalı alan modları kullanımdan kaldırıldı. Eski korumalı alan modlarını kullanan uygulamalar artık otomatik olarak yeni IFRAME
modunu kullanıyor.
Daha önce HTML Hizmeti ile birlikte bu eski modları kullanan uygulamaların, aşağıdaki farklılıkları gidermek için IFRAME
modunda değişiklikler yapması gerekebilir:
- Şimdi,
target="_top"
veyatarget="_blank"
kullanarak bağlantınıntarget
özelliğini geçersiz kılmanız gerekiyor. - HTML Hizmeti tarafından sunulan HTML dosyalarında <!DOCTYPE html>, <html> ve <body> etiketleri bulunmalıdır.
api.js
Google yerel yükleyici kitaplığıIFRAME
modunda otomatik olarak yüklenmiyor- İçerik yeni bir alandan yayınlandığı için seçici kullanıcılarının
setOrigin()
araması gerekiyor - IE9 dahil olmak üzere bazı eski tarayıcılar desteklenmez
- İçe aktarılan kaynaklar artık HTTPS kullanmalıdır
- Form gönderilmesi 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>
Bu özelliği, çevreleyen web sayfasının başlık 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 Apps Komut Dosyası
.html dosyasına otomatik olarak eklenir. Ancak bu durum IFRAME
modu kullanılırken yaşanmaz.
Proje sayfalarınızın IFRAME
kullanılarak doğru şekilde sunulduğundan emin olmak için sayfa içeriğinizi aşağıdaki üst düzey etiketlere sarmalayın:
<!DOCTYPE html>
<html>
<body>
<!-- Add your HTML content here -->
</body>
</html>
Yerel JavaScript yükleyici kitaplığı açıkça yüklenmelidir
api.js
yerel yükleyici kitaplığının otomatik olarak yüklenmesini temel alan komut dosyaları, aşağıdaki örnekte olduğu gibi bu kitaplığın açıkça yüklenmesi için değiştirilmelidir:
<script src="https://apis.google.com/js/api.js?onload=onApiLoad">
</script>
Google Picker API'si değişikliği
Google Picker API'yi kullanırken, artık PickerBuilder'ı oluştururken setOrigin()
çağrısı yapmanız ve aşağıdaki örnekte gösterildiği gibi google.script.host.origin
kaynağını aktarmanız 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 bir örnek için Dosya açma iletişim kutuları bölümüne bakın.
Tarayıcı desteği
IFRAME
korumalı alanı modu, HTML5'teki iframe korumalı alan oluşturma özelliğine dayanır.
Bu özellik, Internet Explorer 9 gibi bazı eski tarayıcılarda desteklenmemektedir. Apps Komut Dosyası projenizde aşağıdaki koşullardan biri geçerliyse bu durum soruna neden olabilir:
HtmlService
ve- daha önce
EMULATED
veyaNATIVE
korumalı alanı kullanıldı
Bu uygulamalar IFRAME
korumalı alan moduna taşındığında, HTML5'in iframe korumalı alana alma özelliğini desteklemeyen bazı eski tarayıcılarda (özellikle IE9 ve önceki sürümler) artık çalışamazlar.
Halihazırda IFRAME
modunu isteyen veya HtmlService
kullanmayan uygulamalar bu sorundan etkilenmez.
İçe aktarılan kaynaklar için artık HTTPS zorunludur
HTTP kullanarak kaynakları içe aktaran önceki uygulamaların HTTPS kullanacak şekilde değiştirilmesi gerekir.
Form gönderilmesi artık varsayılan olarak engellenmiyor
NATIVE
altında, korumalı alana alınan HTML formlarının sayfayı göndermesi ve sayfada gezinmesi engellendi. Bu bilgi sayesinde geliştiriciler, gönder düğmesine onclick
işleyici ekleyerek sonrasında ne olduğu konusunda endişe duymalarına gerek kalmıyor.
Ancak IFRAME
moduyla, HTML formlarının gönderilmesine izin verilir ve bir form öğesi action
özelliği belirtilmemişse boş bir sayfaya gönderilir.
Daha da kötüsü, onclick
işleyicisi tamamlanmadan önce iç iframe boş sayfaya yönlendirir.
Çözüm, sayfanıza form öğelerinin gerçekten gönderilmesini engelleyen bir JavaScript kodu eklemektir. Böylece tıklama işleyicilerin çalışması için yeterli zaman 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>
Eksiksiz bir örneği İstemciden Sunucuya İletişim htmlService kılavuzunda bulabilirsiniz.