GM.xmlHttpRequest:没有收到URL错误

时间:2018-04-28 17:06:53

标签: xmlhttprequest gm-xmlhttprequest greasemonkey-4

此脚本在a Amazon deals page上运行:

// ==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 :(得分:0)

  1. getElementById不会返回网址;它返回一个节点。
  2. 通过AJAX添加dealTitle元素;当您的脚本首次运行时它不存在。因此,您需要在脚本中使用支持AJAX的技术。
  3. 这样的事情应该有效:

    // ==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