Javascript-форум (https://javascript.ru/forum/)
-   Firefox/Mozilla (https://javascript.ru/forum/css-html-firefox-mizilla/)
-   -   JSONP+GreaseMonkey+GAS (https://javascript.ru/forum/css-html-firefox-mizilla/54159-jsonp-greasemonkey-gas.html)

glot 06.03.2015 01:03

JSONP+GreaseMonkey+GAS
 
Здравствуйте.
у меня следующая проблема, я не могу получить ответ от GAS через JSONP.
кусок кода GM
var urlAPP="https://script.google.com/macros/s/AKfycby1bs7AbTMIfUx0_lltnPPpQOc5FVSPs1JD9oG9E_FUXXXXXX/exec?";
var paramsAPP="rate="+GM_getValue('Rate',7)+"&fixsum="+GM_getValue('FixSum',0)+"&callback";
  console.log(urlAPP+paramsAPP);
JSONP(urlAPP+paramsAPP, function(response) {
    console.log(response);

alert(response);
  });

вот код GAS:
// Script-as-app template.
function doGet(e) {
  try {
    var rate=+e.parameter.rate;
    var fixsum=+e.parameter.fixsum;
  var urlSS='https://docs.google.com/spreadsheets/d/1ySQrRkxTxksoy9bD8IFHys_48ie6pSnDvJrUc5xxxx/edit'
    var ss =SpreadsheetApp.openByUrl(urlSS);
    var sheet = ss.getSheets()[1];
    
        sheet.appendRow([rate, fixsum]);
   
    return ContentService.createTextOutput(e.parameter.callback + '.call(this,"OK")').setMimeType(ContentService.MimeType.JAVASCRIPT);
  } catch(e) {
    return ContentService.createTextOutput(e.parameter.callback + '.call(this,"ERROR")').setMimeType(ContentService.MimeType.JAVASCRIPT);
  } 
 
}

GM правильно отправляет запрос, GAS правильно обрабатывает и формирует ответ,но я не могу получить и разобрать ответ. в консоли сообщение

ReferenceError: __JSONP__4 is not defined

сформированный ответ GAS

__JSONP__4.call(this,"OK")

Использую библиотеку
http://devpro.it/code/209.html

пример использования
http://webreflection.blogspot.ru/201...for-jsonp.html

PS пробовал вместо .call(this,"OK"), ставить .call(window,"OK"), ноль эмоций
Куда втыкать лом?

glot 07.03.2015 02:44

Разобрался, jsonp работает только через unsafeWindow

в GM в шапку добавляем
// @grant       unsafeWindow

в html страницу (в head) дописываем
<script src="http://taorus.ru/js/JSONP.js" type="text/javascript"></script>
<script>function callGoogle(sURL){
JSONP(sURL, function(response) {
//код обработчика
alert(response);})
}
</script>

в теле скрипта GM вызываем функцию unsafeWindow.callGoogle(sURL)
var urlAPP="https://script.google.com/macros/s/AKfycby1bs7AbTMIfUx0_lltnPPpQOc5FVSPs1JD9oG9E_FUXXXXXX/exec?";
var paramsAPP="rate="+GM_getValue('Rate',7)+"&fixsum="+GM_getValue('FixSum',0)+"&callback";
var sURL= urlAPP+paramsAPP;
  unsafeWindow.callGoogle(sURL);

в gas (развернутое как веб приложение)
return ContentService.createTextOutput(e.parameter.callback+'.call(window, "ok")').setMimeType(ContentService.MimeType.JAVASCRIPT);


Часовой пояс GMT +3, время: 05:12.