IFRAME Sandbox Moduna Geçiş

Apps Komut Dosyası bir güvenlik korumalı alanı kullanır ve Google Workspaceiçin koruyucu izolasyon sağlar. bazı durumlarda kullanılabilir. Tümü IFRAME dışında korumalı alan modları artık kullanımdan kaldırıldı. Daha eski korumalı alanı kullanan uygulamalar modları artık otomatik olarak yeni IFRAME modunu kullanıyor.

Daha önce HTML Hizmeti ile bu eski modları kullanan uygulamaların IFRAME modunda aşağıdaki farklılıkları gidermek için değişiklikler yapın:

  • Artık bağlantının target özelliğini target="_top" veya target="_blank"
  • HTML Hizmeti tarafından sunulan HTML dosyalarında <!DOCTYPE html>, <html> ve <body> etiketleri
  • Google yerel yükleyici kitaplığı api.js şu sürede otomatik olarak yüklenmiyor: IFRAME modu
  • Kullanıcıların araması gereken seçici İçerik yeni bir alan adından sunulduğu için setOrigin()
  • 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.

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, <base> baştaki etiket bölümüne ekleyin:

<!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 otomatik olarak Apps Komut Dosyası .html dosyasına eklenir. Ancak IFRAME modunu kullanıyor.

Proje sayfalarınızın IFRAME kullanılarak doğru şekilde sunulduğundan emin olmak için sayfa içeriğini aşağıdaki üst düzey etiketlere ekleyin:

<!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ştirilmesi gerekir:

<script src="https://apis.google.com/js/api.js?onload=onApiLoad">
</script>

Google Picker API'si değişikliği

Google Picker API'sini kullanırken artık derleme işlemi sırasında setOrigin() yöntemini çağırmalısınız. PickerBuilder'ı seçeceğim ve gösterildiği gibi google.script.host.origin kaynağında geç aşağıdaki örnekte:

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);
}

Eksiksiz bir çalışan örnek için bkz. Dosya açma iletişim kutuları.

Tarayıcı desteği

IFRAME korumalı alanı modu şuna göredir: iframe korumalı alanı kullanabilirsiniz. Bu özellik, Internet Explorer 9 gibi bazı eski tarayıcılarda desteklenmemektedir. Bu Apps Komut Dosyası projenizde şunlardan biri geçerliyse sorun olabilir:

  • HtmlService ve
  • daha önce EMULATED veya NATIVE korumalı alanı kullanıldı

Bu uygulamalar IFRAME korumalı alan moduna taşınırsa artık şu cihazlarda çalışmayabilir HTML5'in iframe'ini desteklemeyen bazı eski tarayıcılar (özellikle IE9 ve önceki sürümler) korumalı alan oluşturma özelliği.

Zaten IFRAME modunu isteyen veya HtmlService kullanmayan uygulamalar bu sorundan etkilenmez.

İçe aktarılan kaynaklar için artık HTTPS zorunludur

Kaynakları HTTP kullanarak içe aktaran önceki uygulamaların HTTPS kullanın.

Form gönderilmesi artık varsayılan olarak engellenmiyor

Korumalı alana alınan HTML formlarının NATIVE altında gönderilmesi engellendi ve sayfada gezinme ile ilgili daha fazla bilgi edinebilirsiniz. Bu durumda, geliştiriciler onclick ve sonrasında ne olduğu konusunda endişelenmenize gerek kalmaz.

Ancak IFRAME modunda HTML formlarının gönderilmesine izin verilir ve öğesinin boş bir sayfaya göndereceği belirtilmiş bir action özelliğine sahip değil. Daha da kötüsü, iç iframe'in onclick etiketinden önceki boş sayfaya yönlendirmesi bitirme şansına sahip olur.

Çözüm, sayfanıza formun doldurulmasını önleyen JavaScript kodu eklemektir öğelerinin gönderilmesini engeller. Böylece, tıklama işleyicilerin işlev:

<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 HTMLService kılavuzunda bulabilirsiniz. İstemciden Sunucuya İletişim.