2015-05-19 4 views
1

Я знаю, что подобные вопросы были заданы здесь раньше, но я не нашел ответа, который мне помог. Простите за это! Я, наверное, слишком неопытен, чтобы понять эти ответы, поэтому, пожалуйста, несите меня.Вызов скрипта Google Apps из расширения Chrome

Я написал скрипт Google Apps, который сканирует конкретную электронную таблицу (не авторизован мной, но я могу просмотреть) и подсчитывает определенные поля. Функция doGet (e) возвращает счетчик, поэтому, когда я запускаю опубликованное как веб-приложение, я вижу число.

Теперь из моего background.js в моем расширении хрома я сделал что-то вроде этого:

var my_app = "https://script.google.com/a/macros/google.com/s/.../exec?param=value"; 
var xhr = new XMLHttpRequest(); 
try { 
    xhr.open("GET", my_app); 
    xhr.send(null); 
    var result = xhr.getAllResponseHeaders(); 
    localStorage.count = result; 
    chrome.browserAction.setBadgeText({text: localStorage.count}); 
} catch(e) 
    ... 
} 

Это очень грубо, так как я новичок в JavaScript и Chrome Extensions и такие.

Я предполагаю, что getAllResponseHeaders() не является тем, как я получаю итоговое число, которое отображается при вызове my_app, так что я должен использовать вместо этого? В ссылке API для XMLHttpRequest я не нашел ничего очевидного.

Я уверен, что с моим кодом намного больше не прав, но давайте сделаем шаг за шагом.

Спасибо уже заранее! Подробные ответы были бы замечательными, поэтому я могу следить за ними и распространять мои очень ограниченные знания.

+0

Возможный дубликат [Как использовать скрипт Google Apps ContentService в качестве сервера REST] (http://stackoverflow.com/questions/11475972/how-to-use-google-apps-script-contentservice-as-a- rest-server) –

+0

связанный Q решает, что вам нужно –

ответ

0

в основном я просто не разобрать выход направо. Результат, который я получил, содержал много вещей, и число, которое я искал, было скрыто в этом беспорядке строки, всегда за некоторой строкой, называемой «cajaHtml».

Поэтому вызов теперь:

xhr.open("GET", my_app); 
xhr.onreadystatechange = handleResponse; 
xhr.responseType = "text"; 
xhr.send(null); 

с

function handleResponse() { 
    if (xhr.readyState == 4) { 
    var result = xhr.responseText.split("cajaHtml")[1]; 
    } 
} 

Спасибо!

0

Если вы делаете запрос HTTP со стороны клиента JavaScript в Apps Script, то вы можете использовать что-то вроде этого:

function requestToAppsScript() { 
    if (window.XMLHttpRequest) { 
    // code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } else { // code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=function() { 
    //console.log('xmlhttp.readyState: ' + xmlhttp.readyState); 
    if (xmlhttp.readyState===4 && xmlhttp.status===200) { 
     //console.log('xmlhttp.responseText: ' + xmlhttp.responseText); 

     var theReturnData = xmlhttp.responseText; 
     //console.log('return value: ' + theReturnData); 

    }; 
    }; 

    xmlhttp.open("GET","URL here",true); 
    xmlhttp.send(); 

}; 
+1

Это часть кода, использующая очень старые методы совместимости, но вопрос в особенности касается расширений Chrome, поэтому цель - это только последняя версия Chrome. – Xan

Смежные вопросы