此脚本在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中发送的页面中获取的链接?
答案 0 :(得分:0)
getElementById
不会返回网址;它返回一个节点。dealTitle
元素;当您的脚本首次运行时它不存在。因此,您需要在脚本中使用支持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
。