Difference between revisions of "User:Ama Omega/archive/lsl hacks"
< User:Ama Omega | archive
Jump to navigation
Jump to search
Kelly Linden (talk | contribs) |
Kelly Linden (talk | contribs) |
||
Line 48: | Line 48: | ||
=== HTTP-In === | === HTTP-In === | ||
* Scripts can become web servers via HTTP-In(link) | * Scripts can become web servers via HTTP-In(link) | ||
<lsl> | |||
default | |||
{ | |||
state_entry() | |||
{ | |||
llRequestURL(); | |||
} | |||
http_request(key id, string method, string body) | |||
{ | |||
if (method == URL_REQUEST_GRANTED) | |||
{ | |||
llSay(0,"URL is: " + body); | |||
} | |||
else if (method == "GET") | |||
{ | |||
llSay(0,"Received page request."); | |||
llHTTPResponse(id,200,"OK"); | |||
} | |||
} | |||
} | |||
</lsl> | |||
=== llSetPrimMediaParams for data: urls that link back to HTTP-In === | === llSetPrimMediaParams for data: urls that link back to HTTP-In === | ||
* Which means you can make web pages that trigger other page views via http-in links | * Which means you can make web pages that trigger other page views via http-in links |
Revision as of 16:01, 26 February 2010
One step at a time .......
llSetPrimMediaParams
- Use llSetPrimMediaParams to set the url and various parameters on the face of a prim via LSL.
<lsl> default {
state_entry() { llSetPrimMediaParams(0, // Side to display the media on. [PRIM_MEDIA_AUTO_PLAY,TRUE, // Show this page immediately PRIM_MEDIA_CURRENT_URL,"http://google.com", // The url if they hit 'home' PRIM_MEDIA_HOME_URL,"http://google.com", // The url currently showing PRIM_MEDIA_HEIGHT_PIXELS,512, // Height/width of media texture will be PRIM_MEDIA_WIDTH_PIXELS,512]); // rounded up to nearest power of 2. }
} </lsl>
data: urls
There is a special url type: "data:" that lets you send the html *in the url*. Paste the below into your browser's address bar.
data:text/html,<h1>This is a test</h1><h2>This is a test</h2><h3>This is a test</h3>
llSetPrimMediaParams for data: urls
- Thus you can build arbitrary html in your LSL script and display it on the face of the prim
<lsl> show(string html) {
html = "data:text/html," + llEscapeURL(html); llSetPrimMediaParams(0, // Side to display the media on. [PRIM_MEDIA_AUTO_PLAY,TRUE, // Show this page immediately PRIM_MEDIA_CURRENT_URL,html, // The url if they hit 'home' PRIM_MEDIA_HOME_URL,html, // The url currently showing PRIM_MEDIA_HEIGHT_PIXELS,512, // Height/width of media texture will be PRIM_MEDIA_WIDTH_PIXELS,512]); // rounded up to nearest power of 2.
} default {
state_entry() {
show("
This is a test
This is a test
This is a test
");
}
} </lsl>
HTTP-In
- Scripts can become web servers via HTTP-In(link)
<lsl> default {
state_entry() { llRequestURL(); } http_request(key id, string method, string body) { if (method == URL_REQUEST_GRANTED) { llSay(0,"URL is: " + body); } else if (method == "GET") { llSay(0,"Received page request."); llHTTPResponse(id,200,"OK"); } }
} </lsl>
llSetPrimMediaParams for data: urls that link back to HTTP-In
- Which means you can make web pages that trigger other page views via http-in links
// example LSL
Forms
- You can put forms in data: urls
// data:text/html,<form action="http://google.com" method="GET">Search:<input type="text" name="search"><input type="submit" value="Submit"></form>
The Magic
- You can set the script HTTP-In url as the form action to get the results of the form sent back to the script
// example LSL
The Limits
- 1024 bytes per url
- llEscapeURLs means non-alphanumeric characters are 3 bytes (ouch)
- Must force another page view after form submission since HTTP-In can't generate HTML
The Tricks
- <base href="<http-in-url>/">
- Tiny urls