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 吗?
getElementById
不return一个URL;它 return 是一个节点。
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
。
此脚本是 运行 在 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 吗?
getElementById
不return一个URL;它 return 是一个节点。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
。