GM.xmlHttpRequest: 没有收到 URL 错误

GM.xmlHttpRequest: Received no URL Error

此脚本是 运行 在 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 中发送的页面中获取的 link 吗?

  1. getElementById不return一个URL;它 return 是一个节点。
  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