[IronPython] IronPython to JavaScript

Jimmy Schementi Jimmy.Schementi at microsoft.com
Wed Jan 14 20:08:22 CET 2009


A MINIMAL reproduction of the error would be appropriate =) 

> -----Original Message-----
> From: users-bounces at lists.ironpython.com [mailto:users-
> bounces at lists.ironpython.com] On Behalf Of Kristian Jaksch
> Sent: Wednesday, January 14, 2009 4:15 AM
> To: Discussion of IronPython
> Subject: Re: [IronPython] IronPython to JavaScript
> 
> Thanks again for the reply.
> 
> I must be getting something seriously wrong. I did what you said and I
> don't get any Javascript error but I still get the same error as
> before from Ironpython:
> 
> "SystemError: Object reference not set to an instance of an object."
> 
> I looked at the source code of your Web IDE and tried to understand
> how you did it there. You are hooking up a button click with the
> SetExample() function and that works just fine but if I try to call
> the SetExample() directly from the "_method()" function in the
> RefreshExamples class, then I get the same error as above. Below I
> show what I mean (it's your code a bit modified):
> 
> 
> setCode = ScriptableEvent()
> load = Load()
> 
> 
> def SetExample(name):
>      args = ScriptableEventArgs()
>     args.code = 'TESTING'
>     setCode.OnEvent(args)   #SystemError: Object reference not set to
> an instance of an object.
> 
> 
> class RefreshExamples(Scriptable):
>     def _method(self):
>         SetExample('browserDOM')    #THIS DOESN'T WORK (It makes the
> call but gives the error above)
> 
> 
> refresh = RefreshExamples()
> 
> HtmlPage.RegisterScriptableObject("codeChange", codeChange)
> HtmlPage.RegisterScriptableObject("refresh", refresh)
> HtmlPage.RegisterScriptableObject("load", load)
> HtmlPage.RegisterScriptableObject("setCode", setCode)
> 
> # Default example
> HtmlPage.Document.code.value = examples.browserDOM
> 
> root = Canvas()
> refresh._method()
> 
> 
> Application.Current.RootVisual = root
> 
> 
> Have I misunderstood this completely or shouldn't it be possible to
> directly call the SetExample()? Please bear in mind that I've only
> been programming Ironpython a couple of months :-)
> 
> Mustn't these errors only depend on IronPython and have nothing to do
> with the JavaScript? I mean, first is the Silverlight app built, and
> this error occurs at that time so Javascript can't have any part in
> the errors?
> 
> I know it's much to ask for but would it be possible for me to send
> you the minimalistic test website I have so you maybe can have a quick
> look at it? Or if you maybe have a as small as possible project I can
> have a look at.
> 
> Again, thanks for all your help!
> 
> 
> 
> 2009/1/14 Michael Foord <fuzzyman at voidspace.org.uk>:
> > Ahhh... there is a detail I missed out in that article. You can only
> hook up
> > the Javascript function after the Silverlight control has loaded.
> This is
> > *possibly* the cause of your problems.
> >
> > I do the hooking up in an onload function:
> >
> >
> >                 function onload() {
> >                     control =
> document.getElementById('SilverlightPlugin');
> >                     control.Content.setCode.Event = setCode;
> >                 }
> >
> > You pass this function in the online parameter in the Silverlight
> object
> > element:
> >
> >               <object id="SilverlightPlugin"
> > data="data:application/x-silverlight," type="application/x-
> silverlight-2"
> > width="450" height="540">
> >                 <param name="source" value="app.xap"/>
> >                 <param name="onerror" value="onSilverlightError" />
> >                 <param name="onload" value="onload" />
> >
> > Hopefully this sorts out the problem for you.
> >
> > Michael Foord
> >
> > Kristian Jaksch wrote:
> >>
> >> Thanks for the reply!
> >>
> >> No, I can't get it to work with Javascript either. I added the
> script
> >> below to my page:
> >>
> >>          <script type="text/javascript">
> >>               function some_function(sender, args) {
> >>               value = args.val;
> >>               alert(value);
> >>               }
> >>
> >>               control = document.getElementById("sl2");
> >>               control.Content.event.Event = some_function;  // THIS
> >> LINE GIVES AN ERROR
> >>           </script>
> >>
> >> I'm not sure about the exact translation of the error message (It's
> in
> >> swedish) but it's something like:
> >>
> >> "Error: Invalid pointer"
> >>
> >> I guess it has something to do with the error I receive in my
> "app.py"
> >> file as I described previously.
> >>
> >> I made a minimal app.py file to test it again but I still receive
> the
> >> same error. This file also test to get a string from Javascript to
> >> Ironpython and that works just fine. Below is my complete file:
> >>
> >>
> >> import clr, sys
> >>
> >> clr.AddReferenceToFile("Scriptable.dll")
> >>
> >> from System.Windows import Application
> >> from System.Windows.Browser import *
> >> from System.Windows.Controls import *
> >> from System.Windows import Input
> >> from Scriptable import *
> >>
> >>
> >> class GetFromEditor(ScriptableForString):
> >>    def _method(self, string):
> >>        root.message.Text = string
> >>        #return new_string
> >>
> >> GetFromEditor = GetFromEditor()
> >>
> >> root = Application.Current.LoadRootVisual(UserControl(), "app.xaml")
> >>
> >> HtmlPage.RegisterScriptableObject("GetFromEditor", GetFromEditor)
> >>
> >>
> >> event = ScriptableEvent()
> >>
> >> # This must also be registered
> >> HtmlPage.RegisterScriptableObject("event", event)
> >>
> >> args = ScriptableEventArgs()
> >> args.val = 'some string'
> >> event.OnEvent(args)
> >>
> >>
> >> It must be something I'm missing but I just can't see what it could
> >> be. Do you know of any good example were this approach is used?
> >>
> >> Thanks again!
> >>
> >>
> >> 2009/1/12 Michael Foord <fuzzyman at voidspace.org.uk>:
> >>
> >>>
> >>> xkrja wrote:
> >>>
> >>>>
> >>>> I'm trying to call javascript from IronPython (via Silverlight 2)
> but I
> >>>> can'
> >>>> get it to work properly. I looked at this example:
> >>>>
> >>>>
> http://www.voidspace.org.uk/ironpython/silverlight/scriptable.shtml#id1
> 0
> >>>>
> http://www.voidspace.org.uk/ironpython/silverlight/scriptable.shtml#id1
> 0
> >>>> It's explained very clearly but when I try to run my code I get a
> System
> >>>> Error:
> >>>>
> >>>> SystemError: Object reference not set to an instance of an object.
> >>>>
> >>>> I just inserted the lines of code found on the example page in my
> >>>> IronPyton
> >>>> code:
> >>>>
> >>>> event = ScriptableEvent()
> >>>>
> >>>> # This must also be registered
> >>>> HtmlPage.RegisterScriptableObject("event", event)
> >>>>
> >>>> args = ScriptableEventArgs()
> >>>> args.val = 'some string'
> >>>> event.OnEvent(args) #This gives me a System Error
> >>>>
> >>>> I create a C# .dll as explained in the example and add a reference
> to
> >>>> it.
> >>>> The source is below:
> >>>>
> >>>> using System;
> >>>> using System.Windows.Browser;
> >>>>
> >>>> namespace Scriptable
> >>>> {
> >>>>
> >>>>   [ScriptableTypeAttribute]
> >>>>   public class ScriptableForString
> >>>>   {
> >>>>       [ScriptableMemberAttribute]
> >>>>       public string method(string value)
> >>>>       { return this._method(value); }
> >>>>
> >>>>       public virtual string _method(string value)
> >>>>       { return "override me"; }
> >>>>   }
> >>>>
> >>>>   [ScriptableType]
> >>>>   public class ScriptableEvent
> >>>>   {
> >>>>       [ScriptableMember]
> >>>>       public event EventHandler Event;
> >>>>
> >>>>       public virtual void OnEvent(ScriptableEventArgs e)
> >>>>       {
> >>>>           Event(this, e);
> >>>>       }
> >>>>   }
> >>>>
> >>>>   [ScriptableTypeAttribute]
> >>>>   public class ScriptableEventArgs : EventArgs
> >>>>   {
> >>>>       private string _val;
> >>>>
> >>>>       [ScriptableMemberAttribute]
> >>>>       public string val
> >>>>       {
> >>>>           get { return _val; }
> >>>>           set { _val = value; }
> >>>>       }
> >>>>   }
> >>>> }
> >>>>
> >>>> Can anyone explain what I'm doing wrong?
> >>>> Thanks for any help!
> >>>>
> >>>>
> >>>>
> >>>
> >>> Hmmm... do you have any Javascript hooking up to the event? If you
> don't,
> >>> try hooking up to it and see if it makes any difference.
> >>>
> >>> The same code works for me. :-)
> >>>
> >>> Michael
> >>>
> >>> --
> >>> http://www.ironpythoninaction.com/
> >>> http://www.voidspace.org.uk/blog
> >>>
> >>>
> >>> _______________________________________________
> >>> Users mailing list
> >>> Users at lists.ironpython.com
> >>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> >>>
> >>>
> >>
> >> _______________________________________________
> >> Users mailing list
> >> Users at lists.ironpython.com
> >> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> >>
> >
> >
> > --
> > http://www.ironpythoninaction.com/
> > http://www.voidspace.org.uk/blog
> >
> >
> > _______________________________________________
> > Users mailing list
> > Users at lists.ironpython.com
> > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> >
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com




More information about the Ironpython-users mailing list