To use "Scriptable" you'd need to mark the method you want to call with an 
[Scriptable] attribute. Since Python doesn't support attributes, you can't use 
that method from Python. However, using Invoke will work just fine, since it's 
simply an eval.

~js


On 4/8/08 5:48 AM, "Vineet Jain (gmail)" <[EMAIL PROTECTED]> wrote:

I found an easier way to call javascript from python and it worked the very 
first time:

With string arg:
       HtmlPage.Window.Invoke("callToJsWithStringSimple2", "string passed from 
python")

With no string arg:
       HtmlPage.Window.Invoke("callToJsWithStringSimple2")

Is there any reason why you have to use all the scriptable stuff that Michael 
was using instead of the above?

Vineet


From: Vineet Jain (gmail) [mailto:[EMAIL PROTECTED]
Sent: Monday, April 07, 2008 10:28 PM
To: '[email protected]'
Subject: Having problems calling javascript from ironpython in silverlight

I can call from javascript to python but cannot call from python to javascript. 
I get the error on my onload function that
I'm trying to access a property (callToJsWithString) which does not exist. I've 
included a test template for python and
javascript code. Any help would be appreciated.

Python Code:------------------------>

        import clr
       clr.AddReference("Scriptable, Version=0.0.0.0, Culture=neutral, 
PublicKeyToken=null")

        from Scriptable import (
           Scriptable, ScriptableForString,
           ScriptableEvent, ScriptableEventArgs
        )

        import sys
        from System.Windows.Browser.HtmlPage import Document
        import System.Windows.Browser.HtmlPage as HtmlPage

        #calling javascript function from python
       callToJsWithString = ScriptableEvent()

        #calling python from javascript
        class CallFromJs(ScriptableForString):
           def _method(self, code):
               Document.value_from_python.innerHTML = code
        callFromJs = CallFromJs()

        class CallFromJs2(ScriptableForString):
           def _method(self, code):
               args = ScriptableEventArgs()
               args.code = "calling javascript from python"
               callToJsWithString.OnEvent(args)
        callFromJs2 = CallFromJs2()

       HtmlPage.RegisterScriptableObject("callFromJs", callFromJs)
       HtmlPage.RegisterScriptableObject("callFromJs2", callFromJs2)
       HtmlPage.RegisterScriptableObject("callToJsWithString", 
callToJsWithString)


Javascript Code:------------------------>

        function callToJsWithString(s, e) {
           alert(e.code);
        };

      function onload() {
                                               
$('#value_from_python').html("after 1");
                                               
alert(document.getElementById("SilverlightControl").Content);
           
document.getElementById("SilverlightControl").Content.callToJsWithString.Event 
= callToJsWithString;
                                               
$('#value_from_python').val("after 2");
      };
                               var controlID = "SilverlightControl"
                               Silverlight.createObjectEx({
                                   source: "app.xap",
                                   parentElement: 
document.getElementById("SilverlightControlHost"),
                                   id: controlID,
                                   properties: {
                                                   width:'1',
                                                   height:'1',
                                                   inplaceInstallPrompt: false,
                                                   isWindowless: 'True',
                                                   version:'1.1'
                                   },
        events:{
           onError:null,              // OnError property value -- 
event-handler function name.
           onLoad:'onload'},           // OnLoad property value -- 
event-handler function name.
                                   initParams: "start=scan.py, debug=true"
                               });

_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to