Google Appsスクリプトを使用して作成したエラー報告ビーコンがあり、自分自身として実行され、「誰でも、匿名でも」アクセスできるように公開されていますはずですは、GASへのXドメイン要求が許可されることを意味します。
ただし、コードがビーコンに送信された後、私のブラウザーは応答にAccess-Control-Allow-Origin
ヘッダーがないことを示しています。
ここで何か不足していますか?これは、2か月前のことです。 GASがパブリックアクセス用に公開されている限り、GASはAccess-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");
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);
}
私は同じ問題で数時間を失いました。解決策は簡単でした。
スクリプトをwebappとしてデプロイすると、/dev
と/exec
の2つのURLが取得されます。クロスドメインPOSTリクエストを行うには/exec
oneを使用する必要があります。/dev
oneは常に非公開です:承認される必要があり、* Allow-Originを設定しませんヘッダ。
PS .: /exec
はフリーズしているようです—新しいバージョン文字列(デプロイダイアログのドロップダウンリスト)で手動でデプロイするまで、コードの変更は反映されません。 /dev
URLを使用してスクリプトの最新バージョンをデバッグするには、代替ブラウザをインストールして、そのWebセキュリティ機能を無効にします(GoogleChromeでは-disable-web-security)。
私のようにPOSTリクエストのみに興味がある人のためにそれをより簡単にするために:
function doPost(e){
//do stuff ...
var MyResponse = "It Works!";
return ContentService.createTextOutput(MyResponse).setMimeType(ContentService.MimeType.JAVASCRIPT);
}
私の場合は異なり、非常に奇妙な方法でCORSエラーに直面しています。
私のコードは正常に動作し、CORSエラーは発生しません。定数を追加するまでのみです。
const MY_CONST = "...";
Google Apps Script(GAS)は 'const'キーワードを許可していないようです。GASはES3以前またはES5以前のものに基づいています。 「const」のエラーは、CORSのないエラーページURLにリダイレクトされます。
私は同じ問題に遭遇しました:
/exec
_- urlsを呼び出すと問題なく動作しました私はPOST JSON-clientcodeをJSONPにリファクタリングしないようにしようとしていました(以前は常に機能していたので、私は懐疑的でした)。
幸い、後私は1つのCORS以外の要求(_mode: no-cors
_を使用して、httpsドメインからブラウザでfetch()
)を行いましたが、通常のCORS要求は再び正常に機能しました。
最後の説明は次のとおりです。すべての新しいappscript-deploymentは、構成がサーバーレベルで実際に落ち着くまでに少しの時間/使用法を必要とします。