悪意のある HTML や JavaScript がユーザーに配信されないように、Apps Script では iframe を使用して、Google ドキュメント、スプレッドシート、フォームの HTML サービスのウェブアプリやカスタム ユーザー インターフェースをサンドボックス化しています。(メールの本文の生成など、他の状況では、HTML サービスはサンドボックスを使用しません)。サンドボックスでは、クライアントサイドのコードに制限が適用されます。
サンドボックス モード
IFRAME
を除くすべてのサンドボックス モードのサポートが終了しました。古いサンドボックス モードを使用するアプリは、自動的に新しい IFRAME
モードを使用するようになりました。古いモード(NATIVE
と EMULATED
)を使用して開発されたスクリプトがある場合は、移行手順に沿って、IFRAME
モードで適切に機能するようにする必要があります。
setSandboxMode
メソッドは、呼び出されたときに機能しなくなりました。
iframe モードでの制限
IFRAME
サンドボックス モードは、次のキーワードを使用した HTML5 の iframe サンドボックス化機能に基づいています。
allow-same-origin
allow-forms
allow-scripts
allow-popups
allow-downloads
allow-modals
allow-popups-to-escape-sandbox
allow-top-navigation-by-user-activation
- この属性はスタンドアロンのスクリプト プロジェクトに対してのみ設定されます。
allow-top-navigation
キーワードは、コンテンツがトップレベルのブラウジング コンテキストのナビゲーションを可能にするもので、制限されており、サンドボックスで属性として設定されていません。スクリプトをリダイレクトする必要がある場合は、代わりにユーザーが操作を行えるリンクまたはボタンを追加します。
リンク ターゲット属性を設定する
IFRAME
モードでは、リンク ターゲット属性を _top
または _blank
に設定する必要があります。
Code.js
function doGet() {
var template = HtmlService.createTemplateFromFile('top');
return template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
top.html
<!DOCTYPE html>
<html>
<body>
<div>
<a href="http://google.com" target="_top">Click Me!</a>
</div>
</body>
</html>
この属性は、包含ウェブページの head セクション内で <base>
タグを使用してオーバーライドすることもできます。
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
アクティブなコンテンツには HTTPS が必要です
スクリプト、外部スタイルシート、XmlHttpRequests などの「アクティブ」なコンテンツは、HTTP ではなく HTTPS で読み込む必要があります。