IFRAME Sandbox Moduna Geçiş

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" veya target="_blank" kullanarak bağlantının target ö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.

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 veya NATIVE 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.