2015-04-08 19 views
10

Tôi có báo cáo lỗi do tôi tạo bằng tập lệnh Google Apps và được xuất bản để chạy với tư cách bản thân và có thể truy cập được "bất kỳ ai, thậm chí ẩn danh", trong đó nên có nghĩa là Yêu cầu miền X cho GAS được cho phép.Yêu cầu miền chéo của Google Apps Script ngừng hoạt động

Tuy nhiên, trình duyệt của tôi hiện đang cho biết không có tiêu đề Access-Control-Allow-Origin về phản hồi sau khi mã đăng lên đèn hiệu.

Tôi có thiếu gì đó ở đây không? Điều này được sử dụng để làm việc gần đây như hai tháng trước. Miễn là GAS được xuất bản để truy cập công cộng, thì đặt tiêu đề Access-Control-Allow-Origin.

Trong 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"); 

Trả lời

13

Khi thực hiện cuộc gọi đến một kịch bản contentService tôi luôn luôn đã gửi một callback cho JSONP. Vì GAS không hỗ trợ CORS, đây là cách đáng tin cậy duy nhất để đảm bảo ứng dụng của bạn không bị hỏng khi các sự cố miền x đến.

Thực hiện cuộc gọi trong jQuery chỉ cần thêm "& callback =?". Nó sẽ tìm ra mọi thứ khác.

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

Về phía server

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

tôi đánh dấu đây là câu trả lời, nhưng đó là một chút tắt, vì vậy bạn có thể muốn chỉnh sửa. Đối với một số lý do, thiết lập kiểu nội dung bên trong createTextOutput, ngay cả khi cài đặt nó thành JavaScript không khắc phục được sự cố. Tuy nhiên, việc sử dụng hàm setContentType và đặt nó thành JavaScript không hoạt động. Ngoài ra, tôi đang sử dụng POST và không phải là yêu cầu GET trong trường hợp sử dụng này. –

+1

Vâng, JSONP sẽ không hoạt động với Bài đăng. Mọi thứ bạn mô tả đều đúng. Chạy ứng dụng dưới dạng "tôi" cho phép truy cập "ẩn danh". Đảm bảo bạn đang thực hiện cuộc gọi đến địa chỉ được xuất bản chứ không phải địa chỉ nhà phát triển. Nếu tất cả được thiết lập, bạn cần có: Access-Control-Allow-Origin: * Tôi đã thử nghiệm một tập lệnh nhỏ với lệnh hurl.it. Tôi thấy tất cả các tiêu đề thích hợp sẽ trở lại từ đó. –

4

Chỉ cần để làm cho nó đơn giản hơn đối với những người chỉ quan tâm đến một yêu cầu POST như tôi:

function doPost(e){ 

//do stuff ... 

var MyResponse = "It Works!"; 

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

} 
+1

Điều này có vẻ không hiệu quả đối với tôi vào năm 2018. Tôi vẫn gặp lỗi CORS. –

Các vấn đề liên quan