Как мне закодировать пользовательский скрипт GreaseMonkey, чтобы перейти к окну авторизации/входа, находясь на другом веб-сайте (www.sharelatex.com)? Насколько я понимаю, GM_xmlhttpRequest будет выполнять эту функцию, и хотя я получаю статус «ОК» после успешной загрузки GM_xmlhttpRequest, окно входа в систему не появляется. Должен ли я использовать другую функцию? Этот вход в систему должен быть выполнен программно, чтобы пользовательский сценарий мог «поймать» номер токена, который прикрепляется к URL-адресу перенаправления после успешного входа в систему. Затем этот номер токена будет использоваться в вызове Mendeley API для загрузки нужного файла из моей учетной записи Mendeley (используя неявный поток предоставления).
Справочная информация: я пытаюсь создать пользовательский скрипт GreaseMonkey, который добавит кнопку в мою учетную запись www.sharelatex.com, которая при нажатии будет автоматически загружать файл из моей учетной записи на www.mendeley.com с использованием API этого сайта. Код, связанный с кнопкой, также должен учитывать требования входа и аутентификации, необходимые для использования API. Я зарегистрировал свое приложение в Mendeley, получил номер «идентификатора клиента» (0000, для иллюстрации), который я использовал для создания следующего URL-адреса:
var urlAuth = "https://api.mendeley.com/oauth/authorize?client_id=0000&redirect_uri=http://localhost&response_type=token&scope=all"
Если я вручную введу указанный выше URL-адрес непосредственно в свой браузер в качестве URL-адреса, я попаду на страницу входа/авторизации, которая выглядит так, как показано ниже, и это именно то, что я хочу видеть, но программно, а не вручную: Нажмите здесь, чтобы просмотреть окно аутентификации/входа Ниже приведены соответствующие фрагменты моего неисправного пользовательского скрипта GreaseMonkey:
// ==UserScript==
// ... skipping over irrelevant lines ...
// @grant GM_xmlhttpRequest
// ==/UserScript==
var urlAuth = "https://api.mendeley.com/oauth/authorize?client_id=0000&redirect_uri=http://localhost&response_type=token&scope=all"
/* *************** CREATE BUTTON ************************* */
var input = document.createElement("input");
input.type = "button";
input.value="Update bibtex";
input.onclick = getBib;
input.setAttribute("style", "font-size:18px; position:absolute; bottom:10px;left:10px;");
document.body.appendChild(input);
/* ================================================================ */
function getBib()
{
GM_xmlhttpRequest({
method: 'GET',
url: urlAuth,
onload: function(reply) { alert(reply.statusText) }
}
Предупреждение указывает на состояние OK, но окно входа в систему не появляется. Когда я делаю:
alert(urlAuth)
в разделе загрузки, и я вручную копирую / вставляю то, что появляется в окне предупреждения, в адресную область браузера, браузер переводит меня в соответствующее окно входа / авторизации, поэтому сам URL-адрес в порядке.
Почему GM_xmlhttpRequest не выводит меня на экран входа в систему? Я неправильно понимаю функциональность GM_xmlhttpRequest и вместо этого должен использовать другую функцию? Я потратил около 2 полных месяцев, пытаясь понять это, изучая сотни ссылок на тему OAuth2, пользовательских скриптов, Mendeley API и т. д. Несколько примеров: http://userscripts-mirror.org/scripts/review/292038 (многообещающе, так как это единственный пользовательский скрипт GreaseMonkey/Mendeley, но, к сожалению, не выполнять материал OAuth2), https://salesforce.stackexchange.com/questions/76397/accessing-salesforce-rest-api-through-greasemonkey-script (предоставленный ответ никогда не касался вопроса о том, как получить окно входа в систему).
window.open
иpostMessage
. См. пример на meta.stackexchange.com/a/293498/148310. - person Brock Adams   schedule 05.10.2017