Re: General question about what is possible re: AS driving JavaScript
Re: General question about what is possible re: AS driving JavaScript
- Subject: Re: General question about what is possible re: AS driving JavaScript
- From: "Gary (Lists)" <email@hidden>
- Date: Tue, 12 Jul 2005 20:05:36 -0400
"Bill Planey" wrote:
> The trick of number two is: the SEARCH button is part of a "floating"
> element that repositions itself whenever the user scrolls down the page.
No matter. That's not the way to go anyway.
Using AS to generate strings which you then try to insert into forms on
screen is a dead end. Or at least a painful and inefficient end. It depends
on a browser's 'do JavaScript' ability, on the proper structure of the page
elements (the DOM) and so on. Better to just build a query string from the
ground up.
The goal you should have is essentially what someone else mentioned a couple
of days ago: construct the full URL, with the HTML query part appended by
you (from your data) and then request the URL be fetched by anything that
can fetch it: curl, a web browser, the Finder, and so on, depending on the
URL.
Okay, so that's the overall plan. Now how?
First, dissect the target form, as you have begun to do. You now have the
<form>'s source HTML. Forms that use GET are easier to deal with than POST,
and are the most common, so this example uses GET.
An example of dissecting the parts (form example courtesy of PageSpinner):
GIVEN: This form is displayed at a web page with
URL of "http://somedomain.tld/forms/coffee.php
==================================================
<p><b>Order a cup of coffe:</b></p>
<form action="coffeeprocess.php" method="GET" enctype="text/plain">
<p>Name: <input name="name" type="text" value="Your name" size="25"
maxlength="25"/></p>
<p>
Select flavour: <select name="product" size="1">
<option>Cappuccino</option>
<option selected="selected">Java</option>
<option>Medium roasted</option>
</select></p>
<p>
<input name="cbSugar" type="checkbox" value="sugar" checked="checked" />
Include sugar</p>
<p>
<input type="submit" value="Order now!"/> <input type="reset" value="Reset
form" /></p>
</form>
==================================================
What you need to grab from here is:
1. The form's action: coffeeprocess.php
Now, this is obviously relative, so you would need the whole URL, like
http://somedomain.tld/forms/coffeeprocess.php
2. The form's fields:
'name', 'product', 'cbSugar'
That's it.
To construct a URL to submit to the 'action=' destination, I just put all
the strings together. (I've separated out some elements to draw attention to
them.)
--=====
set myVarWithName to "Rupert Giles"
set myVarWithProduct to "Medium roasted"
set formURL to "http://somedomain.tld/forms/coffeeprocess.php" & "?" &
"name=" & myVarWithName & "&" & "product=" & myVarWithProduct & "&" &
"cbSugar=" & "sugar"
--> "http://somedomain.tld/forms/coffeeprocess.php?name=Rupert
Giles&product=Medium roasted&cbSugar=sugar"
--=====
Now, you will have to turn that string in the variable 'formURL' into a
properly encoded string. The <form ...> element tag tells you some about
this, but you will still likely need to URL encode your string.
Smile (a script editor and app building tool) has a built-in command. (I
don't know if it's in the Smile dictionary or the Satimage dictionary. If
it's the later, then you can use the command in other-than-smile-run
scripts.) There are other tools. (And 'curl' may do it for you...I don't
know.)
Once you have the AS variable 'formURL' read to go, then you can "send" your
URL ("send for" the result, more accurately) using whatever tool you want --
depending on what you want back.
If you want to view the form's result page to show in your browser after
submitting the form, then just use your default browser to "open" the form
URL (submit the form).
open location formURL
If you want the source of the result of submitting the form to come back to
you in another AppleScript variable, then you can 'curl' it.
set sh to "curl " & formURL
-- set sh to "curl -i " & formURL -- if you want headers, too
set formResultHTML to (do shell script sh)
Now you can split up the form result HTML however you would like. (Could be
nasty work, depending on how much HTML is sent back as the result.) [1]
I hope that helps you along.
--
Gary
[1] The result of submission is not always another page. A <form...>'s
action can be: ... action="mailto:email@hidden". Then, you would not use
'curl' but rather just: open location formURL -- to launch your email
client, for instance.
P.S.
I know your original message, and the subject, is about JavaScript.
However, that is very browser-dependent. Some browsers have a 'do script'
or 'do JavaScript' command, which will let you ask the browser's JS engine
to handle JS code. However, in practical usage, this is tedious to
construct. If you can control the _form construction_ AND the _AS<->JS form
access_ then you are better off. This makes the AS<->JS approach great for
managing your blog or connecting to some other well-known form. And when
the browser is well know. (Safari is probably the best bet going for
AppleScripting a browser. IE is very useful for this also, and merits
keeping it around as a "web front end". The others just haven't made much
headway in AS capability. Mozilla 1.2 for OS 9 had _the best_ AS support of
any browser I've every seen. OS X Mozilla is back to square zero.)
So, if the form is simple or very well known (in structure) and uses
DOM-level naming, then you have a better chance of interacting well with the
form via AppleScript.
If you can still find it, JJ (of this list) wrote a very useful IE Library
for OS 9. That is a good model to study for building your own handlers.
Not for the weak, but JSOSA is still a useful tool and significantly helps
speak AppleScript with a JavaScript accent.
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Applescript-users mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden