Ash*_*hir 3 javascript jsonp google-apps-script
我试图用contentService的,以服务JSONP与网页谷歌Apps脚本,按照所提供的样本此链接下的"在网页服务JSONP"子课题.
GS代码:
function doGet(request) {
var events = CalendarApp.getEvents(
new Date(Number(request.parameters.start) * 1000),
new Date(Number(request.parameters.end) * 1000));
var result = {
available: events.length == 0
};
return ContentService.createTextOutput(
request.parameters.prefix + '(' + JSON.stringify(result) + ')')
.setMimeType(ContentService.MimeType.JSON);
}
Run Code Online (Sandbox Code Playgroud)
HTML/JS代码:
<script src="https://script.google.com/macros/s/AKfycbwZCY0qrZ09szGvKOttA30IaJkdMAZrh_oNnvv0qzCqFWyuO5Wc/exec?start=1325437200&end=1325439000&prefix=alert"></script>
Run Code Online (Sandbox Code Playgroud)
我通过webapp使用以下参数部署GS代码来发布它:
不幸的是,每当我尝试运行/打开包含代码的HTML文件时,我在浏览器的控制台中出现以下错误,并且没有任何反应:

如何在没有错误的情况下运行Google Apps脚本链接中提供的此示例?
浏览器翻译的DOM如下:
<html>
<head>
<script src="https://script.google.com/macros/s/AKfycbwZCY0qrZ09szGvKOttA30IaJkdMAZrh_oNnvv0qzCqFWyuO5Wc/exec?start=1325437200&end=1325439000&prefix=alert">
</script>
</head>
<body></body>
</html>
Run Code Online (Sandbox Code Playgroud)
生成的链接,在我的情况是:
" https://script.google.com/macros/s/AKfycbwZCY0qrZ09szGvKOttA30IaJkdMAZrh_oNnvv0qzCqFWyuO5Wc/exec?start=1325437200&end=1325439000&prefix=alert "
如果此链接放置在浏览器地址栏中,它显示了以下信息:

这意味着返回的授权响应无法在浏览器上显示并被转换为有效DOM.
如何克服这个问题?
JSONP需要以下任何一种方法才能工作:
我假设您正在尝试使用3 - 否则,使用1并且它将起作用.如果确实需要3(例如,访问用户电子邮件的JSONP服务),则必须授予他们在服务工作之前授权服务的能力.为此,请在doGet()中添加以下内容:
function doGet(e) {
if (e.parameter.auth)
return HtmlService.createHtmlOutput('Thank you! Now the script can run!');
// ... rest of your code
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以为用户提供指向他们可以访问的script.google.com/YOUR_SCRIPT_URL?auth=1的链接.(值1无关紧要......任何值都可以).他们将获得授权页面,如果他们接受授权,他们将看到您的感谢信息,JSONP服务将为他们工作.这只需要执行一次...脚本将在用户下次访问您的页面时记住授权,除非您已将其更改为需要新权限或用户已撤消授权.
| 归档时间: |
|
| 查看次数: |
4437 次 |
| 最近记录: |