Apps Script korzysta z bezpiecznej piaskownicy, aby zapewnić izolację aplikacji Google Workspacew określonych sytuacjach. Wycofano teraz wszystkie tryby piaskownicy z wyjątkiem IFRAME
. Aplikacje korzystające ze starszych trybów piaskownicy teraz automatycznie korzystają z nowszego trybu IFRAME
.
Aplikacje, które wcześniej używały tych starszych trybów w usłudze HTML, mogą musieć wprowadzić zmiany w trybie IFRAME
, aby rozwiązać te różnice:
- Teraz musisz zastąpić atrybut
target
linku za pomocątarget="_top"
lubtarget="_blank"
- Pliki HTML udostępniane przez usługę HTML muszą zawierać tagi <!DOCTYPE html>, <html> i <body>.
- Biblioteka natywnych modułów wczytywania Google
api.js
nie wczytuje się automatycznie w trybieIFRAME
- Użytkownicy z rolą Picket muszą dzwonić do usługi
setOrigin()
, ponieważ treści są wyświetlane z nowej domeny - Niektóre starsze przeglądarki, w tym IE9, nie są obsługiwane.
- Zaimportowane zasoby muszą teraz używać protokołu HTTPS
- Przesyłanie formularzy nie jest już domyślnie zablokowane
Różnice te zostały szczegółowo opisane w kolejnych sekcjach.
Ustawianie atrybutu elementu docelowego linku
W trybie IFRAME
ustaw atrybut celu linku na _top
lub _blank
:
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>
Możesz też zastąpić ten atrybut za pomocą tagu <base> w sekcji nagłówka strony internetowej:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
Tagi HTML najwyższego poziomu
W trybie piaskownicy NATIVE
(i EMULATED
) niektóre tagi HTML są automatycznie dodawane do pliku .html Apps Script, ale nie ma to miejsca w trybie IFRAME
.
Aby mieć pewność, że strony projektu będą prawidłowo wyświetlane za pomocą obiektu IFRAME
, umieść ich zawartość w tych tagach najwyższego poziomu:
<!DOCTYPE html>
<html>
<body>
<!-- Add your HTML content here -->
</body>
</html>
Biblioteka natywnego programu ładującego JavaScript musi być jawnie wczytana
Skrypty, które korzystały z automatycznego ładowania biblioteki natywnego wczytywania api.js
, trzeba zmienić, aby wczytywały ją bezpośrednio, jak w tym przykładzie:
<script src="https://apis.google.com/js/api.js?onload=onApiLoad">
</script>
Zmiana interfejsu Google Picker API
Korzystając z interfejsu Google Picker API, musisz teraz wywołać setOrigin()
podczas tworzenia obiektu PickerBuilder i przekazać w źródle google.script.host.origin
, jak to widać w poniższym przykładzie:
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);
}
Praktyczny przykład działania znajdziesz w artykule o oknach otwierania pliku.
Obsługiwane przeglądarki
Tryb piaskownicy IFRAME
działa na podstawie funkcji piaskownicy iframe w HTML5.
Nie jest to obsługiwane w niektórych starszych przeglądarkach, takich jak Internet Explorer 9. Problem może występować, jeśli projekt Apps Script zawiera oba te elementy:
- używa
HtmlService
, a - poprzednio używano piaskownicy
EMULATED
lubNATIVE
Przeniesienie tych aplikacji do trybu piaskownicy IFRAME
spowoduje, że mogą one przestać działać w niektórych starszych przeglądarkach (zwłaszcza IE9 i starszych), które nie obsługują funkcji piaskownicy w elemencie iframe HTML5.
Ten problem nie dotyczy aplikacji, które już żądają trybu IFRAME
lub w ogóle nie używają interfejsu HtmlService
.
Protokół HTTPS jest teraz wymagany w przypadku importowanych zasobów
Poprzednie aplikacje, które importowały zasoby przez protokół HTTP, muszą zostać zmienione tak, aby korzystały z protokołu HTTPS.
Przesyłanie formularzy nie jest już domyślnie zablokowane
W ramach NATIVE
stosowane w piaskownicy formularze HTML uniemożliwiające przesyłanie i poruszanie się po stronie. Dzięki temu deweloper może po prostu dodać moduł obsługi onclick
do przycisku przesyłania i nie musi się martwić o tym, co dzieje się później.
W trybie IFRAME
można jednak przesyłać formularze HTML, a jeśli element formularza nie ma określonego atrybutu action
, prześle go na pustą stronę.
Co gorsza, wewnętrzny element iframe przekieruje na pustą stronę, zanim moduł obsługi onclick
zakończy działanie.
Rozwiązaniem jest dodanie do strony kodu JavaScript, który uniemożliwia prawidłowe przesyłanie elementów formularza, by moduły obsługi kliknięć miały czas na działanie:
<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>
Pełny przykład znajdziesz w przewodniku htmlService Komunikacja między klientami.