GM.xmlHttpRequest: Difference between revisions
m →Examples: white space treatment for copy/pasting |
→Response Object: responseHeaders is string with CRLF |
||
(98 intermediate revisions by 31 users not shown) | |||
Line 1: | Line 1: | ||
== Description == | == Description == | ||
This | This method performs a similar function to the standard [http://developer.mozilla.org/en/docs/XMLHttpRequest XMLHttpRequest] object, but allows these requests to cross the [https://developer.mozilla.org/En/Same_origin_policy_for_JavaScript same origin policy] boundaries. | ||
== Syntax == | == Syntax == | ||
{{Function|GM.xmlHttpRequest|details}} | |||
Compatibility: [[Version_history#4.0_2|Greasemonkey 4.0+]] | |||
=== Arguments === | |||
This method only takes one argument, the <code>details</code> object. | |||
Described below are the ''properties'' that may be defined on that object. | |||
See [[#Examples]] for more detail on how to use each. | |||
Fields: | |||
: | |||
[[# | ; <code>binary</code> | ||
: <code>Boolean</code> Optional, default false. When true, the <code>data</code> is sent as a Blob. | |||
; <code>context</code> | |||
: <code>Object</code> (Compatibility: [[Version_history#1.10|1.10+]]) Optional, any object. This object will also be the <code>context</code> property of the [[#Response Object]]. | |||
; <code>data</code> | |||
: <code>String</code> Optional. Data to send in the request body. Usually for <code>POST</code> method requests. <sup>[[#Notes|[1]]]</sup> | |||
; <code>headers</code> | |||
: <code>Object</code> Optional. A set of headers to include in the request. <sup>[[#Notes|[2]]]</sup> | |||
; <code>method</code> | |||
: <code>String</code> Required. Type of HTTP request to make (E.G. <code>"GET"</code>, <code>"POST"</code>) | |||
; <code>overrideMimeType</code> | |||
: <code>String</code> Optional. A MIME type to specify with the request (E.G. <code>"text/html; charset=ISO-8859-1"</code>). | |||
; <code>password</code> | |||
: <code>String</code> Optional. Password to use for authentication purposes. | |||
; <code>responseType</code> | |||
: <code>String</code> Optional. Decode the response as specified type. Accepted values are <code>""</code>, <code>"arraybuffer"</code>, <code>"blob"</code>, <code>"document"</code>, <code>"json"</code>, <code>"text"</code>, <code>"ms-stream"</code>. Default value is <code>"text"</code>. See [https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType XMLHttpRequest responseType]. | |||
; <code>synchronous</code> | |||
: <code>Boolean</code> Defaults to false. When true, this is a ''synchronous'' request. '''Be careful''': The entire Firefox UI will be locked and frozen until the request completes. In this mode, more data will be available in the [[#Returns|return value]]. | |||
; <code>timeout</code> | |||
: <code>Number</code> The number of milliseconds to wait before terminating the call; zero (the default) means wait forever. | |||
; <code>upload</code> | |||
: <code>Object</code> Optional. Object containing optional function callbacks (<code>onabort</code>, <code>onerror</code>, <code>onload</code>, <code>onprogress</code>) to monitor the upload of data. Each is passed one argument, the [[#Response Object]]. | |||
; <code>url</code> | |||
: <code>String</code> Required. The URL to make the request to. Must be an absolute URL, beginning with the scheme. May be relative to the current page. | |||
; <code>user</code> | |||
: <code>String</code> Optional. User name to use for authentication purposes. | |||
Event handlers: | |||
: | |||
: | ; <code>onabort</code> | ||
: <code>Function</code> Optional. Will be called when the request is aborted. Passed one argument, the [[#Response Object]]. | |||
; <code>onerror</code> | |||
: <code>Function</code> Optional. Will be called if an error occurs while processing the request. Passed one argument, the [[#Response Object]]. | |||
; <code>onload</code> | |||
: <code>Function</code> Optional. Will be called when the request has completed successfully. Passed one argument, the [[#Response Object]]. | |||
; <code>onprogress</code> | |||
: <code>Function</code> Optional. Will be called when the request progress changes. Passed one argument, the [[#Response Object]]. | |||
; <code>onreadystatechange</code> | |||
: <code>Function</code> Optional. Will be called repeatedly while the request is in progress. Passed one argument, the [[#Response Object]]. | |||
; <code>ontimeout</code> | |||
: <code>Function</code> Optional. Will be called if/when the request times out. Passed one argument, the [[#Response Object]]. | |||
==== Response Object ==== | |||
All of the callback functions defined in the <code>details</code> object, if called, will receive this type of object as their first (and only) argument. | |||
The data available will vary slightly, depending on the type of callback. | |||
:* | Properties based on a standard [https://developer.mozilla.org/en/xmlhttprequest#Properties XMLHttpRequest] object: | ||
* <code>readyState</code> | |||
* <code>responseHeaders</code>: <code>String</code>, with <code>CRLF</code> line terminators. | |||
* <code>responseText</code> | |||
* <code>status</code> | |||
* <code>statusText</code> | |||
[[# | Greasemonkey custom properties: | ||
* <code>context</code><br><code>Object</code> The same object passed into the original request. | |||
<!-- Not yet in 4.x | |||
* <code>finalUrl</code><br><code>String</code> (Compatibility: [[Version_history#0.8.20080609.0|0.8.0+]]) The final URL requested, if <code>Location</code> redirects were followed. | |||
--> | |||
Properties for <code>progress</code> callbacks, based on [https://developer.mozilla.org/En/nsIDOMProgressEvent nsIDOMProgressEvent]: | |||
: | * <code>lengthComputable</code> | ||
* <code>loaded</code> | |||
* <code>total</code> | |||
== Returns == | |||
<code>undefined</code> | |||
== Examples == | |||
=== | === Bare Minimum === | ||
<pre class='sample'> | |||
GM.xmlHttpRequest({ | |||
method: "GET", | |||
url: "http://www.example.com/", | |||
onload: function(response) { | |||
alert(response.responseText); | |||
} | |||
}); | |||
</pre> | |||
==== | === GET request === | ||
<pre class='sample'> | |||
GM.xmlHttpRequest({ | |||
method: "GET", | |||
url: "http://www.example.net/", | |||
: | 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; | |||
// Inject responseXML into existing Object (only appropriate for XML content). | |||
if (!response.responseXML) { | |||
responseXML = new DOMParser() | |||
.parseFromString(response.responseText, "text/xml"); | |||
} | |||
console.log([ | |||
response.status, | response.status, | ||
response.statusText, | response.statusText, | ||
Line 165: | Line 124: | ||
response.responseHeaders, | response.responseHeaders, | ||
response.responseText, | response.responseText, | ||
response.finalUrl | response.finalUrl, | ||
responseXML | |||
].join("\n")); | ].join("\n")); | ||
} | } | ||
}); | }); | ||
</pre> | </pre> | ||
=== POST request === | |||
When making a POST request, '''most''' sites require the Content-Type header to be defined as such: | |||
<pre class='sample'> | |||
GM.xmlHttpRequest({ | |||
method: "POST", | |||
url: "http://www.example.net/login", | |||
data: "username=johndoe&password=xyz123", | |||
headers: { | |||
"Content-Type": "application/x-www-form-urlencoded" | |||
}, | |||
onload: function(response) { | |||
if (response.responseText.indexOf("Logged in as") > -1) { | |||
location.href = "http://www.example.net/dashboard"; | |||
} | |||
} | |||
}); | |||
</pre> | |||
=== HEAD request === | |||
As defined in HTTP, you may issue a HEAD request to get the response headers, without receiving the entire response body. | |||
<pre class='sample'> | |||
GM.xmlHttpRequest({ | |||
url: "http://www.example.com", | |||
method: "HEAD", | |||
onload: function(response) { | |||
console.log(response.responseHeaders); | |||
} | |||
});</pre> | |||
== Notes == | == Notes == | ||
< | If the <code>data</code> field contains form-encoded data, you usually must also set the header <code>'Content-Type': 'application/x-www-form-urlencoded'</code> in the <code>headers</code> field. | ||
[[Category:API_Reference|X]] | [[Category:API_Reference|X]] |
Latest revision as of 12:57, 23 August 2021
Description
This method performs a similar function to the standard XMLHttpRequest object, but allows these requests to cross the same origin policy boundaries.
Syntax
function GM.xmlHttpRequest( details )
Compatibility: Greasemonkey 4.0+
Arguments
This method only takes one argument, the details
object.
Described below are the properties that may be defined on that object.
See #Examples for more detail on how to use each.
Fields:
binary
Boolean
Optional, default false. When true, thedata
is sent as a Blob.context
Object
(Compatibility: 1.10+) Optional, any object. This object will also be thecontext
property of the #Response Object.data
String
Optional. Data to send in the request body. Usually forPOST
method requests. [1]headers
Object
Optional. A set of headers to include in the request. [2]method
String
Required. Type of HTTP request to make (E.G."GET"
,"POST"
)overrideMimeType
String
Optional. A MIME type to specify with the request (E.G."text/html; charset=ISO-8859-1"
).password
String
Optional. Password to use for authentication purposes.responseType
String
Optional. Decode the response as specified type. Accepted values are""
,"arraybuffer"
,"blob"
,"document"
,"json"
,"text"
,"ms-stream"
. Default value is"text"
. See XMLHttpRequest responseType.synchronous
Boolean
Defaults to false. When true, this is a synchronous request. Be careful: The entire Firefox UI will be locked and frozen until the request completes. In this mode, more data will be available in the return value.timeout
Number
The number of milliseconds to wait before terminating the call; zero (the default) means wait forever.upload
Object
Optional. Object containing optional function callbacks (onabort
,onerror
,onload
,onprogress
) to monitor the upload of data. Each is passed one argument, the #Response Object.url
String
Required. The URL to make the request to. Must be an absolute URL, beginning with the scheme. May be relative to the current page.user
String
Optional. User name to use for authentication purposes.
Event handlers:
onabort
Function
Optional. Will be called when the request is aborted. Passed one argument, the #Response Object.onerror
Function
Optional. Will be called if an error occurs while processing the request. Passed one argument, the #Response Object.onload
Function
Optional. Will be called when the request has completed successfully. Passed one argument, the #Response Object.onprogress
Function
Optional. Will be called when the request progress changes. Passed one argument, the #Response Object.onreadystatechange
Function
Optional. Will be called repeatedly while the request is in progress. Passed one argument, the #Response Object.ontimeout
Function
Optional. Will be called if/when the request times out. Passed one argument, the #Response Object.
Response Object
All of the callback functions defined in the details
object, if called, will receive this type of object as their first (and only) argument.
The data available will vary slightly, depending on the type of callback.
Properties based on a standard XMLHttpRequest object:
readyState
responseHeaders
:String
, withCRLF
line terminators.responseText
status
statusText
Greasemonkey custom properties:
context
Object
The same object passed into the original request.
Properties for progress
callbacks, based on nsIDOMProgressEvent:
lengthComputable
loaded
total
Returns
undefined
Examples
Bare Minimum
GM.xmlHttpRequest({ method: "GET", url: "http://www.example.com/", onload: function(response) { alert(response.responseText); } });
GET request
GM.xmlHttpRequest({ method: "GET", url: "http://www.example.net/", 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; // Inject responseXML into existing Object (only appropriate for XML content). if (!response.responseXML) { responseXML = new DOMParser() .parseFromString(response.responseText, "text/xml"); } console.log([ response.status, response.statusText, response.readyState, response.responseHeaders, response.responseText, response.finalUrl, responseXML ].join("\n")); } });
POST request
When making a POST request, most sites require the Content-Type header to be defined as such:
GM.xmlHttpRequest({ method: "POST", url: "http://www.example.net/login", data: "username=johndoe&password=xyz123", headers: { "Content-Type": "application/x-www-form-urlencoded" }, onload: function(response) { if (response.responseText.indexOf("Logged in as") > -1) { location.href = "http://www.example.net/dashboard"; } } });
HEAD request
As defined in HTTP, you may issue a HEAD request to get the response headers, without receiving the entire response body.
GM.xmlHttpRequest({ url: "http://www.example.com", method: "HEAD", onload: function(response) { console.log(response.responseHeaders); } });
Notes
If the data
field contains form-encoded data, you usually must also set the header 'Content-Type': 'application/x-www-form-urlencoded'
in the headers
field.