ls -al

仮想通貨やプログラミングに関する事などをつらつらと書き綴ります

GASでJSONPを返す

GASでJSONPを返す方法を調べたのでここにメモします。


方法

以下のようにします。これはGETリクエストに対して適当なデータをJSONP形式で返すメソッドです。

function doGet() {
  var data = {};//返したいデータをこの変数に格納してください
  var content = {
    output:   e.parameter.callback + '(' + JSON.stringify(data) + ');',
    mimeType: ContentService.MimeType.JAVASCRIPT
  };
  return ContentService.createTextOutput(content.output).setMimeType(content.mimeType);
}

ポイントは以下の2点です

  • createTextOutputに渡すテキストを、’<e.parameter.callbackにセットされた文字列>(<シリアライズされたオブジェクト>);‘という形式にする

    • JSONPの形式に対応させるためです
  • setMimeTypeにわたすMimeTypeをContentService.MimeType.JAVASCRIPTとする

    • JSONPの形式に対応させるためです

まとめ

GASでJSONPを扱うことができるようになりました。これでCORSを気にすること無く、外部からのリクエストに対してデータを返すことが出来ます。ただし、外部からGASに対してデータを渡す場合にはCORSを何とかする方法はありません。さすがのGASもそこまで融通は利かないようです。


参考

  • [GAS]送信結果をJSONPで返す
    • ほぼこのページと同等の内容ですが、使用しているソースコードに間違いがありました
      • ✕ ContentService.MimeType.JavaScript
      • ◯ ContentService.MimeType.JAVASCRIPT