GM.xmlHttpRequest: не получено ошибка URL - PullRequest
0 голосов
/ 28 апреля 2018

Этот скрипт запускается на странице сделок Amazon :

// ==UserScript==
// @name     Unnamed Script 138015
// @version  1
//@include     http://www.amazon.in/*
// @grant       GM_setValue   
// @grant       GM_getValue  
// @grant       GM.xmlHttpRequest
// @grant       GM_xmlhttpRequest
// @grant       GM.addStyle
// @grant       GM.getResourceText
// @grant       GM.getValue
// @grant       GM.setValue
// @grant       GM.info
// @require     http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// ==/UserScript==
var x=document.getElementById("dealTitle"); //fetches the URL
alert(x);
GM.xmlHttpRequest ( {
    method: "GET",
    url: x,
    onload: function (response) {
        var parser  = new DOMParser ();
        var doc         = parser.parseFromString (response.responseText, "text/html");
        var price  = document.getElementsByClassName("a-size-medium a-color-price")[0];
        $("body").prepend ('<h1>' + price + '</h1>');
    },
    onerror: function (e) {
        console.error ('**** error ', e);
    },
    onabort: function (e) {
        console.error ('**** abort ', e);
    },
    ontimeout: function (e) {
        console.error ('**** timeout ', e);
    }
} );

В журнале консоли отображается следующая ошибка.

Error: GM.xmlHttpRequest: Received no URL.
Stack trace:
GM_xmlHttpRequest@user-script:null/Unnamed%20Script%20138015:572:21
userScript@user-script:null/Unnamed%20Script%20138015:504:1
scopeWrapper@user-script:null/Unnamed%20Script%20138015:632:9
@user-script:null/Unnamed%20Script%20138015:487:17

Есть ли способ использовать ссылку, извлеченную со страницы для отправки в HttpRequest?

1 Ответ

0 голосов
/ 28 апреля 2018
  1. getElementById не возвращает URL; он возвращает узел.
  2. Элемент dealTitle добавляется через AJAX; он не существует, когда ваш скрипт запускается впервые. Итак, вам нужно использовать AJAX-совместимые приемы в вашем скрипте.

Как-то так должно работать:

// ==UserScript==
// @name        Unnamed Script 138015
// @version     2
// @match       *://www.amazon.in/*
// @grant       GM.xmlHttpRequest
// @grant       GM_xmlhttpRequest
// @require     http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @require     https://gist.github.com/raw/2625891/waitForKeyElements.js
// ==/UserScript==

waitForKeyElements ("#dealTitle", fetchDealPage);

function fetchDealPage (jNode) {
    var dURL = jNode.attr ("href");
    console.log ("dURL: ", dURL);

    GM.xmlHttpRequest ( {
        method: "GET",
        url: dURL,
    //etc...
}

Хотя вам, возможно, придется установить Tampermonkey и изменить строку на GM_xmlhttpRequest ( {.
Не уверен, что GM4 поддерживает использование GM.xmlHttpRequest таким образом.

...