[Twisted-Python] Woven LivePage sendScript works with some scripts but not others

Donovan Preston dp at twistedmatrix.com
Thu Jul 17 20:56:19 MDT 2003


On Thursday, July 17, 2003, at 5:37PM, Tim Andrews wrote:

>
> Hi twisted,
>
> I'm trying to use LivePage to send some script to a web page.
>
> All works well if the script is as per the manual example, ie
> sendScript("alert('Hello world!')")
> will pop up a window as expected.
>
> However, if i try a script like "document.all.fred.innerHTML='FRED'" I 
> get
> an error on the page "Error: document.all.fred is null or not an 
> object". I
> know the script is okay because if it is on the on the page it will 
> work.
>
> Any clues?

This is *probably* because, with the version of LivePage you are 
currently using, the JavaScript is evaluated within the context of the 
Output IFrame. I'm not a regular in-browser javascript expert, but 
something like top.document.all.fred or parent.document.all.fred might 
work better for you.

By the way, if you are trying to do your own innerHTML setting, don't. 
Woven LivePage includes a cross-browser abstraction of this sort of 
in-browser DOM mutation. Just write your Widgets in a way that they 
will always render themselves the way you want them to based on the 
Model data and the state of the session. (For example, you could set 
session.color = 'blue' and it would be different from someone else who 
has session.color = 'green')

Then, use one of the MVC notification APIs to cause Woven to re-render 
your Widget and send the appropriate, abstract JavaScript to the 
browser:

someWidgetReference. modelChanged({'request': request})

or

someModelReference.notify({'request': request})


Why the hideous dictionary-with-the-request-in-it? Ancient historical 
reasons which are entirely irrelevant now. I will change it to simply 
take the request asap, but for now, just do that :-)

dp





More information about the Twisted-Python mailing list