GM.xmlHttpRequest: Difference between revisions
m Text replace - "</pre>}}" to "</pre>" |
simplify |
||
Line 3: | Line 3: | ||
== 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. | ||
Compatibility: [[Version_history#0.2.5|Greasemonkey 0.2.5+]] | |||
== Syntax == | == Syntax == | ||
{{Function|GM_xmlhttpRequest|details}} | |||
== 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. | |||
: | ; <code>method</code> | ||
: <code>String</code> Type of HTTP request to make (E.G. <code>"GET"</code>, <code>"POST"</code>) | |||
; <code>url</code> | |||
: <code>String</code> The URL to make the request to. Must be an absolute URL, beginning with the scheme. | |||
; <code>headers</code> | |||
: <code>Object</code> Optional. A set of headers to include in the request. <sup>[[#Notes|[2]]]</sup> | |||
; <code>overrideMimeType</code> | |||
: <code>String</code> (Compatibility: [[Version_history#0.6.8|0.6.8+]]) Optional. A MIME type to specify with the request (E.G. <code>"text/html; charset=ISO-8859-1"</code>). | |||
; <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>binary</code> | |||
: <code>Boolean</code> (Compatibility: [[Version_history#0.8.3|0.8.3+]]) Optional, default false. When true, use the underlying <code>.sendAsBinary()</code> method. | |||
; <code>onerror</code> | |||
: <code>Function</code> Optional. Will be called when the request has completed successfully. 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>onreadystatechange</code> | |||
: <code>Function</code> Optional. Will be called when the request has completed successfully. Passed one argument, the [[#Response Object]]. | |||
=== | === Response Object === | ||
All three 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. | |||
; <code>status</code> | |||
: <code>Integer</code> The HTTP response status (E.G. 200 or 404) upon success, or <code>null</code> upon failure. | |||
; <code>statusText</code> | |||
: <code>String</code> The HTTP response status line (E.G. <code>"OK"</code>, <code>"Not Found"</code>) upon success, or <code>null</code> upon failure. | |||
; <code>readyState</code> | |||
: <code>Number</code> The <code>readyState</code> as defined in [https://developer.mozilla.org/en/XMLHttpRequest XMLHttpRequest]. | |||
; <code>responseText</code> | |||
: <code>String</code> The <code>responseText</code> as defined in [https://developer.mozilla.org/en/XMLHttpRequest XMLHttpRequest]. | |||
; <code>responseHeaders</code> | |||
: <code>String</code> The response headers as defined in [https://developer.mozilla.org/en/XMLHttpRequest#getAllResponseHeaders() XMLHttpRequest]. | |||
; <code>finalUrl</code> | |||
: <code>String</code> (Compatibility: [[Version_history#0.8.20080609.0|0.8.0+]]) The final URL requested, if <code>Location</code> redirects were followed. | |||
== Examples == | == Examples == | ||
=== GET request === | |||
<pre class='sample'> | <pre class='sample'> | ||
Line 161: | Line 62: | ||
url: "http://www.example.net/", | url: "http://www.example.net/", | ||
headers: { | headers: { | ||
"User-Agent": "Mozilla/5.0", | "User-Agent": "Mozilla/5.0", // If not specified, navigator.userAgent will be used. | ||
"Accept": "text/xml" | "Accept": "text/xml" // If not specified, browser defaults will be used. | ||
}, | }, | ||
onload: function(response) { | onload: function(response) { | ||
// Inject responseXML into existing Object if not present | // Inject responseXML into existing Object if not present | ||
if (!response.responseXML) | if (!response.responseXML) { | ||
response.responseXML = new DOMParser().parseFromString(response.responseText, "text/xml"); | response.responseXML = new DOMParser() | ||
.parseFromString(response.responseText, "text/xml"); | |||
} | |||
GM_log([ | GM_log([ | ||
Line 182: | Line 85: | ||
</pre> | </pre> | ||
=== POST request === | |||
When making a POST request, '''most''' sites require the Content-Type header to be | When making a POST request, '''most''' sites require the Content-Type header to be defined as such: | ||
<pre class='sample'> | <pre class='sample'> | ||
Line 195: | Line 98: | ||
}, | }, | ||
onload: function(response) { | onload: function(response) { | ||
if (response.responseText.indexOf("Logged in as") > -1) | if (response.responseText.indexOf("Logged in as") > -1) { | ||
location.href = "http://www.example.net/dashboard"; | location.href = "http://www.example.net/dashboard"; | ||
} | |||
} | } | ||
}); | }); | ||
</pre> | </pre> | ||
=== HEAD request === | |||
As defined in HTTP, you may issue a HEAD request to read the response headers, but skip reading the entire response body. | |||
This request type must be supported by the server (but is by most). | |||
<pre class='sample'> | <pre class='sample'> | ||
GM_xmlhttpRequest({ | GM_xmlhttpRequest({ | ||
Line 212: | Line 118: | ||
} | } | ||
});</pre> | });</pre> | ||
== Notes == | == Notes == | ||
<sup> | <sup>1</sup> | ||
Note that 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. | |||
<sup> | <sup>2</sup> | ||
Some headers may not actually work through GM_xmlhttpRequest. | |||
For example, the <code>Referer</code> header cannot be overriden. | |||
[http://groups.google.com/group/greasemonkey-dev/browse_thread/thread/77c94cc17c6b2669] | |||
[http://userscripts.org/forums/1/topics/1302] | |||
[[Category:API_Reference|X]] | [[Category:API_Reference|X]] |
Revision as of 22:30, 8 February 2010
Description
This method performs a similar function to the standard XMLHttpRequest object, but allows these requests to cross the same origin policy boundaries.
Compatibility: Greasemonkey 0.2.5+
Syntax
function GM_xmlhttpRequest( details )
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.
method
String
Type of HTTP request to make (E.G."GET"
,"POST"
)url
String
The URL to make the request to. Must be an absolute URL, beginning with the scheme.headers
Object
Optional. A set of headers to include in the request. [2]overrideMimeType
String
(Compatibility: 0.6.8+) Optional. A MIME type to specify with the request (E.G."text/html; charset=ISO-8859-1"
).data
String
Optional. Data to send in the request body. Usually forPOST
method requests. [1]binary
Boolean
(Compatibility: 0.8.3+) Optional, default false. When true, use the underlying.sendAsBinary()
method.onerror
Function
Optional. Will be called when the request has completed successfully. Passed one argument, the #Response Object.onload
Function
Optional. Will be called when the request has completed successfully. Passed one argument, the #Response Object.onreadystatechange
Function
Optional. Will be called when the request has completed successfully. Passed one argument, the #Response Object.
Response Object
All three of the callback functions defined in the details
object, if called, will receive this type of object as their first (and only) argument.
status
Integer
The HTTP response status (E.G. 200 or 404) upon success, ornull
upon failure.statusText
String
The HTTP response status line (E.G."OK"
,"Not Found"
) upon success, ornull
upon failure.readyState
Number
ThereadyState
as defined in XMLHttpRequest.responseText
String
TheresponseText
as defined in XMLHttpRequest.responseHeaders
String
The response headers as defined in XMLHttpRequest.finalUrl
String
(Compatibility: 0.8.0+) The final URL requested, ifLocation
redirects were followed.
Examples
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) { // Inject responseXML into existing Object if not present if (!response.responseXML) { response.responseXML = new DOMParser() .parseFromString(response.responseText, "text/xml"); } GM_log([ response.status, response.statusText, response.readyState, response.responseHeaders, response.responseText, response.finalUrl, response.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 read the response headers, but skip reading the entire response body. This request type must be supported by the server (but is by most).
GM_xmlhttpRequest({ url: "http://www.example.com", method: "HEAD", onload: function(response) { GM_log(response.responseHeaders); } });
Notes
1
Note that 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.
2
Some headers may not actually work through GM_xmlhttpRequest.
For example, the Referer
header cannot be overriden.
[1]
[2]