web-dev-qa-db-ja.com

Google Apps Scriptのクロスドメインリクエストが機能しなくなった

Google Appsスクリプトを使用して作成したエラー報告ビーコンがあり、自分自身として実行され、「誰でも、匿名でも」アクセスできるように公開されていますはずですは、GASへのXドメイン要求が許可されることを意味します。

ただし、コードがビーコンに送信された後、私のブラウザーは応答にAccess-Control-Allow-Originヘッダーがないことを示しています。

ここで何か不足していますか?これは、2か月前のことです。 GASがパブリックアクセス用に公開されている限り、GASAccess-Control-Allow-Originヘッダーを設定していました

Google Appsスクリプト:

function doPost(data){
  if(data){
        //Do Something
  }
  return ContentService.createTextOutput("{status:'okay'}", ContentService.MimeType.JSON);
}

クライアント側:

$.post(beacon_url, data, null, "json");
17

Contentserviceスクリプトを呼び出すとき、私は常にJSONPのコールバックを送信しました。 GASはCORSをサポートしていないため、xドメインの問題が発生したときにアプリが破損しないようにする唯一の信頼できる方法です。

JQueryで呼び出しを行うには、「&callback =?」を追加するだけです。それは他のすべてを理解します。

 var url = "https://script.google.com/macros/s/{YourProjectId}/exec?offset="+offset+"&baseDate="+baseDate+"&callback=?";
 $.getJSON( url,function( returnValue ){...});

サーバー側

function doGet(e){
 var callback = e.parameter.callback;
 //do stuff ...
 return ContentService.createTextOutput(callback+'('+ JSON.stringify(returnValue)+')').setMimeType(ContentService.MimeType.JAVASCRIPT);
}
19
Spencer Easton

私は同じ問題で数時間を失いました。解決策は簡単でした。

スクリプトをwebappとしてデプロイすると、/dev/execの2つのURLが取得されます。クロスドメインPOSTリクエストを行うには/exec oneを使用する必要があります。/dev oneは常に非公開です:承認される必要があり、* Allow-Originを設定しませんヘッダ。

PS .: /execはフリーズしているようです—新しいバージョン文字列(デプロイダイアログのドロップダウンリスト)で手動でデプロイするまで、コードの変更は反映されません。 /dev URLを使用してスクリプトの最新バージョンをデバッグするには、代替ブラウザをインストールして、そのWebセキュリティ機能を無効にします(GoogleChromeでは-disable-web-security)。

10
SergeyR

私のようにPOSTリクエストのみに興味がある人のためにそれをより簡単にするために:

function doPost(e){

 //do stuff ...

 var MyResponse = "It Works!";

 return ContentService.createTextOutput(MyResponse).setMimeType(ContentService.MimeType.JAVASCRIPT);

}
5
David Anderton

私の場合は異なり、非常に奇妙な方法でCORSエラーに直面しています。

私のコードは正常に動作し、CORSエラーは発生しません。定数を追加するまでのみです。

const MY_CONST = "...";

Google Apps Script(GAS)は 'const'キーワードを許可していないようです。GASはES3以前またはES5以前のものに基づいています。 「const」のエラーは、CORSのないエラーページURLにリダイレクトされます。

参照:
https://stackoverflow.com/a/54413892/558189

0
datdinhquoc

私は同じ問題に遭遇しました:

  • ローカルホストでWebページを実行しているときに、ブラウザーから_/exec_- urlsを呼び出すと問題なく動作しました
  • httpsドメインから呼び出されるとcrossorigin-errorをスローします

私はPOST JSON-clientcodeをJSONPにリファクタリングしないようにしようとしていました(以前は常に機能していたので、私は懐疑的でした)。

可能な修正#1

幸い、私は1つのCORS以外の要求(_mode: no-cors_を使用して、httpsドメインからブラウザでfetch())を行いましたが、通常のCORS要求は再び正常に機能しました。

最後の考え

最後の説明は次のとおりです。すべての新しいappscript-deploymentは、構成がサーバーレベルで実際に落ち着くまでに少しの時間/使用法を必要とします。

0