window.GLOBALS [17] является пустым в новом интерфейсе Gmail, в то время как он присутствует для старого интерфейса Gmail - PullRequest
0 голосов
/ 08 июня 2018

У меня есть расширение Chrome, которое использует библиотеку под названием gmail.js , которая в некотором роде зависит от объекта window.GLOBALS [17] из окна Gmail, однако в новом пользовательском интерфейсе gmail кажется, что Gmailчтобы удалить GLOBALS [17], который теперь равен нулю, теперь у меня нет возможности получить доступ к данным, которые присутствовали внутри объекта GLOBALS [17], я искал, посмотрел и попробовал все, но, похоже, не имеетальтернатива объекту GLOBALS [17]

GLOBALS [17] по-прежнему доступен в старом интерфейсе Gmail

When seen in old Gmail UI

И имеет значение nullв новом интерфейсе Gmail

Wheen seen from new Gmail UI

Без этого я не могу знать важную информацию, например, находится ли электронная почта в режиме просмотра беседы и т. д.

Почемуэто было удалено?Есть ли альтернатива?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Я уже много лет поддерживаю расширение Chrome для клиента, которое расширяет функциональность Gmail с помощью поддержки S / MIME с использованием крипто-смарт-карт.В старом интерфейсе Gmail мы взяли много информации из GLOBAL [17], в том числе:

  • параметр ike
  • - делегированный переключатель почтового ящика
  • делегированные электронные письма
  • язык интерфейса пользователя
  • переключатель подписи электронной почты (включен / выключен)
  • подпись электронной почты - добавляется в конце всех исходящих сообщений

Всю вышеуказанную информацию можно найти в других местах в GLOBALS или в Gmail DOM.Однако у меня была проблема с поиском информации о переключателе подписи и подписи электронной почты (в старом пользовательском интерфейсе это было в GLOBALS [17] [4] [1], свойства sx_mrsp_ *, bx_se).Я заметил, что новый пользовательский интерфейс Gmail загружает эту информацию со страницы, содержащей JavaScript _GM_setData с параметром JSON, который содержит очень похожую информацию, такую ​​как GLOBALS.Раздел в загруженных данных начинается со строки '_ GM_setData ({"w43KIf": ["sdpc" ..' . Может быть, этот JSON может использоваться в качестве полной замены GLOBALS. Вот фрагмент кодаКод JS, который я реализовал для этой цели - если вы решаете подобные проблемы, вы можете использовать его для вдохновения (код требует JQuery и любую реализацию sprintf):

console.log(
        "Going to download Gmail config to check for signature and signature switch.");
$.ajax(sprintf(
        "https://mail.google.com/mail/ca/u/0/?ui=2&ik=%s&view=cm&fs=1&tf=1",
        gmailConfig_ike), {
    "type": "GET",
    "accept": "html",
    "error": function (response,
                       statusText1,
                       jqXHR1)
    {
        console.log("error getting config data (signature will be unavailable)):" + statusText1);
        sendResponse(false);
    },
    "success": function (response,
                         statusText1,
                         jqXHR1)
    {
        // console.log("Data obtained: " + response);

        var dom = $(response);

        dom.filter('script').each(function ()
        {
            var myscript = this.text || this.textContent || this.innerHTML || '';
            // console.log("script:  " + myscript);
            if (myscript.indexOf('["bx_se"') !== -1) {
                console.log("bx_se found.");

                //console.log(myscript);
                var startToken = '_GM_setData({"';
                var endToken = '"}); ';
                var subscript = myscript.substring(myscript.indexOf(startToken) + startToken.length - 2);
                // console.log("subscript: " + subscript);
                var finalJSONString = subscript.substring(0,
                        subscript.indexOf(endToken) + 2);
                // console.log("finalJSONString: " + finalJSONString);
                var finalJSON = JSON.parse(finalJSONString);
                //console.log(finalJSON);

                // this locates the interesting information in the JSON object
                var configArr = finalJSON.sBEv4c[2][1];
                // console.log(configArr);

                for (var k = 0; k < configArr.length; k++) {
                    var param = configArr[k];
                    if (param && param[0].indexOf("sx_mrsp_") == 0) {
                        console.log("Signature located: " + param[1]);
                        gmailConfig_signature = param[1];
                    }
                    if (param && param[0].indexOf("bx_se") == 0) {
                        console.log("Signature switch located: " + param[1]);
                        gmailConfig_signSwitch = param[1];
                    }
                    // if (param && param[0].indexOf("sx_dl") == 0) {
                    //     console.log("Language located: " + param[1]);
                    //     // gm_lang = param[1];
                    // }
                }

            }
        });

        sendResponse(true);
    }
});
0 голосов
/ 05 июля 2018

window.GLOBALS [69] будет отражать настройку «Просмотр разговора» для gmail, что делает его альтернативой для window.GLOBALS [17].

checkout Shashikaran's Комментарий к соответствующему выпуск github

...