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 <[email protected]>:
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#id10
http://www.voidspace.org.uk/ironpython/silverlight/scriptable.shtml#id10
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
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
--
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/blog
_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com