I know you have been given many answers, but I'll bud in anyway. I've done way too much JavaScript, I like to think I know it's pitfalls. At 02:45 17/11/99 , Anthony Pfrunder wrote:
The problem is: how do I get a form to talk to an object in another frame? ie:
<input value=".." ... onchange="mywidget.setAttribute('property', value-of-inputbox)>
where mywidget is a javascript function defined in another (loaded) frame.
You can just refer to it's name via the frameset that defines it, like parent.nameofotherframe,mywidget.setAttribute(), but you can never be sure that the other frame has been loaded. To get around this problem, I use an asynchronous message broker in the parent frame. The calling frame checks for a boolean property on it's parent to check wether or not it is capable of doing the messaging, then calling a method on this parent that'll pass on the message to the receiving frame: onLoad="if (parent.bIsTop) parent.setMenu('foo')" The receiving frame sets a boolean flag on the same parent frame to signal it is ready to receive messages: onLoad="if (parent.bIsTop) parent.bNavLoaded = true;" You can now use setTimeout, and a counter, to pass the message on. As long as bNavLoaded (the flag indicating messages can be passed on) is false, and we haven't tried too many times yet, wait a specified time and try again. A real life example using two way message passing is used on http://www.marantz.com/, in both the Hifi and Professional sections (altough I don't think the Professional section is live yet). In the Hifi section, the navigation frame signals the right hand frame on mouse-over events to show descriptions of the menu choices, and the right hand frame, when deeper into the site, signals the navigation frame to tell it what menu option to display. This way the user can use te back and forward buttons of his browser to step through it's browsing history, and the navigation menu follows suit.
Also, how can I "call" a html page without causing a reload:
function jsZDOMsetAttribute(name, value){ call("getWidget/setAttribute?name=name&value=value") }
For further information on this problem please see http://163.182.196.200/zwiki/VisualZope - jsZDOM reflecter part.
For this one you'll need a hidden frame (width or height of 0), or you could use a hidden DynDuo Layer and use it's load method: http://www.dansteinman.com/dynduo/en/dynlayer-common.html You should be able to then also read attributes from the server with this. Just have the server return a page with javascript in it that does the trick. Just remember, that you cannot wait for the page to load and expect it to return a value, you'll have to write something asynchronous (and non-blocking, Navigator's Javascript implementation is single threaded, use setTimeout) to retrieve the value. -- Martijn Pieters, Web Developer | Antraciet http://www.antraciet.nl | Tel: +31-35-7502100 Fax: +31-35-7502111 | mailto:mj@antraciet.nl http://www.antraciet.nl/~mj | PGP: http://wwwkeys.nl.pgp.net:11371/pks/lookup?op=get&search=0xA8A32149 ------------------------------------------