2015-04-08 3 views
10

Ich habe eine Fehlermeldung Beacon erstellt ich mit Google Apps-Skript und es ist veröffentlicht, um als selbst zu laufen und zu "jedermann, auch anonym", was sollte bedeuten, dass X-Domain-Anfragen an GAS sind erlaubt.Google Apps Script domänenübergreifenden Anfragen funktioniert nicht mehr

Jedoch zeigen meine Browser jetzt an, dass es keinen Access-Control-Allow-Origin Header auf der Antwort gibt, nachdem der Code zum Beacon postiert.

Fehle ich hier etwas? Dies funktionierte noch vor zwei Monaten. Solange das GAS für den öffentlichen Zugang veröffentlicht wurde, war es war Einstellung der Access-Control-Allow-Origin Header.

In Google Apps Script:

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

Client Side:

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

Antwort

13

Beim Telefonieren mit einem content Skript einen Rückruf ich immer geschickt haben JSONP. Da GAS CORS nicht unterstützt, ist dies der einzige zuverlässige Weg, um sicherzustellen, dass Ihre App nicht bricht, wenn Probleme mit x-Domänen auftreten.

Einen Anruf in jQuery einfach hinzufügen "& callback =?". Es wird alles andere herausfinden.

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

Auf der Serverseite

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

ich dies als Antwort markiert, aber Es ist ein wenig aus, so dass Sie vielleicht bearbeiten möchten. Aus irgendeinem Grund behebt das Festlegen des Inhaltstyps in createTextOutput, selbst wenn Sie ihn auf JavaScript setzen, das Problem nicht. Es funktioniert jedoch, wenn Sie die Funktion setContentType verwenden und sie auf JavaScript setzen. Außerdem verwende ich in diesem Anwendungsfall eine POST- und keine GET-Anfrage. –

+1

Ah ja, JSONP wird nicht mit Post arbeiten. Alles, was Sie beschrieben haben, klingt korrekt. Führen Sie die App als "mich" Zugriff auf "anonymous" zulassen. Stellen Sie sicher, dass Sie den Anruf an die veröffentlichte Adresse nicht die Entwickleradresse tätigen. Wenn alles eingestellt ist, sollten Sie haben: Access-Control-Allow-Origin: * Ich habe ein kleines Skript mit hurl.it getestet. Ich sehe alle richtigen Header, die von dort zurückkommen. –

4

Nur um es einfacher für diejenigen, die in einer POST-Anforderung wie mich nur daran interessiert sind:

function doPost(e){ 

//do stuff ... 

var MyResponse = "It Works!"; 

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

} 
+1

Das scheint für 2018 nicht zu funktionieren. Ich erhalte immer noch den CORS-Fehler. –