在 IFRAME 沙盒模式的 Google 应用程序脚本中出错 url
Getting wrong url in Google App Script in IFRAME sandbox mode
我有一个 Google 应用程序脚本,它使用自定义样式和脚本呈现我的 html 页面,使用沙盒模式作为 IFRAME
并且每个人都可以通过授权访问它。
Code.gs
function getScriptUrl() {
var url = ScriptApp.getService().getUrl();
console.log(ScriptApp.getService());
return url;
}
function doGet(e) {
if (!e.parameter.page) {
// When no specific page requested, return "home page"
return HtmlService.createTemplateFromFile('index').evaluate()
.setTitle('L1 - UX')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
// else, use page parameter to pick an html file from the script
return HtmlService.createTemplateFromFile(e.parameter['page']).evaluate()
.setTitle('L1 - UX')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename)
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.getContent();
}
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<!-- stylesheets -->
<?!= include('stylesheets'); ?>
</head>
<body>
<?var url = getScriptUrl();?>
<!-- application content -->
<div class="container-fluid">
<div class="row">
<!-- left sidebar -->
<div class="col-sm-3 col-md-2 sidebar">
<ul class="nav nav-sidebar">
<li><a href='<?=url?>?page=overview'>Overview</a></li>
<li class="active"><a href='<?=url?>?page=index'>Form</a></li>
<li><a href='<?=url?>?page=report'>Reports</a></li>
<li><a href='<?=url?>?page=export'>Export</a></li>
</ul>
</div> <!-- left sidebar -->
<!-- main content -->
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<h2 class="sub-header">Content</h2>
</div> <!-- main content -->
</div>
</div> <!-- application content -->
<!-- JavaScripts -->
<?!= include('javascripts'); ?>
</body>
</html>
这里我从 ScriptApp.getService().getUrl()
得到的 url 是错误的。但如果我省略 setSandboxMode(HtmlService.SandboxMode.IFRAME)
,它会给出正确的 url,但这次我的应用程序样式无法正常工作,看起来有线。
更新:
我正在这样访问主页(工作中)- https://script.google.com/macros/s/<script>/dev?page=index
像上面那样访问时生成错误 url。
实际发布的link是-https://script.google.com/macros/s/<script>/exec
/dev
就是您的线索。开发模式链接到当前代码,而 exec 链接到发布版本。
您正在返回 URL 开发脚本解析为。
保存代码并发布最新版本。然后应该按预期工作
我有一个 Google 应用程序脚本,它使用自定义样式和脚本呈现我的 html 页面,使用沙盒模式作为 IFRAME
并且每个人都可以通过授权访问它。
Code.gs
function getScriptUrl() {
var url = ScriptApp.getService().getUrl();
console.log(ScriptApp.getService());
return url;
}
function doGet(e) {
if (!e.parameter.page) {
// When no specific page requested, return "home page"
return HtmlService.createTemplateFromFile('index').evaluate()
.setTitle('L1 - UX')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
// else, use page parameter to pick an html file from the script
return HtmlService.createTemplateFromFile(e.parameter['page']).evaluate()
.setTitle('L1 - UX')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename)
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.getContent();
}
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<!-- stylesheets -->
<?!= include('stylesheets'); ?>
</head>
<body>
<?var url = getScriptUrl();?>
<!-- application content -->
<div class="container-fluid">
<div class="row">
<!-- left sidebar -->
<div class="col-sm-3 col-md-2 sidebar">
<ul class="nav nav-sidebar">
<li><a href='<?=url?>?page=overview'>Overview</a></li>
<li class="active"><a href='<?=url?>?page=index'>Form</a></li>
<li><a href='<?=url?>?page=report'>Reports</a></li>
<li><a href='<?=url?>?page=export'>Export</a></li>
</ul>
</div> <!-- left sidebar -->
<!-- main content -->
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<h2 class="sub-header">Content</h2>
</div> <!-- main content -->
</div>
</div> <!-- application content -->
<!-- JavaScripts -->
<?!= include('javascripts'); ?>
</body>
</html>
这里我从 ScriptApp.getService().getUrl()
得到的 url 是错误的。但如果我省略 setSandboxMode(HtmlService.SandboxMode.IFRAME)
,它会给出正确的 url,但这次我的应用程序样式无法正常工作,看起来有线。
更新:
我正在这样访问主页(工作中)- https://script.google.com/macros/s/<script>/dev?page=index
像上面那样访问时生成错误 url。
实际发布的link是-https://script.google.com/macros/s/<script>/exec
/dev
就是您的线索。开发模式链接到当前代码,而 exec 链接到发布版本。
您正在返回 URL 开发脚本解析为。
保存代码并发布最新版本。然后应该按预期工作