GM_xmlhttprequest Problems & Tutorial somewhere?

322 views Asked by At

I'm learning JS & keep running into the problem of how to put documentation together to do this or that. e.g. Greasemonkey is documented, but you have to know a lot of other context not even referred to to use the greasepot wiki very well.

I've been trying various combinations of the following, for example, and I can only ever get "undefined" from the GM_xmhttprequest function, though:

var url = "https://en.wikipedia.org/wiki/CURL?action=render";

var fetchContent = console.log( function getContent(url) {
  if (url.length < 0) {
    return 0 ;
  }
GM_xmlhttpRequest({
  method: "GET",
  url: url,
  headers: {
    "User-Agent": "Mozilla/5.0",    // If not specified, navigator.userAgent will be used.
    //"Accept": "text/xml"            // If not specified, browser defaults will be used.
  },
  onload: function(response) {
    //var responseXML = null;
    alert(response.responseText);
    // Inject responseXML into existing Object (only appropriate for XML content).

    /*
    if (!response.responseXML) {
      responseXML = new DOMParser()
        .parseFromString(response.responseText, "text/xml");
    }

    GM_log([
      response.status,
      response.statusText,
      response.readyState,
      response.responseHeaders,
      response.responseText,
      response.finalUrl,
      responseXML
    ].join("\n")); 

    */
  }
});
  } )

Yet I'm not sure I'm using it correctly:

Need to define something in 'onload'?? Need to create a var prior? (e.g. var responseHoldingObject = new Object(); ?) ? etc.

And any advice to get the page-fetching I'm looking for going is appreciated. Goal is to fetch content and ultimately append it within another page (e.g. such as within textarea or div).

1

There are 1 answers

0
Amadan On

Learning JS with GreaseMonkey might be a bit advanced.

fetchContent will be assigned the return value of console.log, which is undefined because console.log does not return a value. And what you're logging is the function getContent itself. getContent is never evaluated.

Finally, you can never get a response from an asynchronous function to use outside of the callback reliably (except with polling). Basically it should be something like this (untested):

GM_xmlhttpRequest({
  method: "GET",
  url: url,
  headers: {
    "User-Agent": "Mozilla/5.0",    // If not specified, navigator.userAgent will be used.
    //"Accept": "text/xml"            // If not specified, browser defaults will be used.
  },
  onload: function(response) {

    /* use response here */

  }
});

/* can't use response here */

without the fetchContent = console.log thing.