Silverlight调用javascript问题?

Silverlight调用javascript问题?,javascript,silverlight,function,silverlight-3.0,Javascript,Silverlight,Function,Silverlight 3.0,我使用HtmlPage.Window.Invoke api从一个SL组件调用javascript,当我调用页面中定义的javascript函数(html)时,它会按预期执行,例如 HtmlPage.Window.Invoke("publishValue", topic, jsonObject); 但是,当我将javascript函数放在*.js文件中时,即使*.js文件已加载到DOM中,它也无法执行该方法,因此下面的调用异常失败 HtmlPage.Window.Invoke("Framewor

我使用HtmlPage.Window.Invoke api从一个SL组件调用javascript,当我调用页面中定义的javascript函数(html)时,它会按预期执行,例如

HtmlPage.Window.Invoke("publishValue", topic, jsonObject);
但是,当我将javascript函数放在*.js文件中时,即使*.js文件已加载到DOM中,它也无法执行该方法,因此下面的调用异常失败

HtmlPage.Window.Invoke("FrameworkEventBroker.publishFrameworkEvent", topic, jsonObject);
知道为什么会这样吗

干杯


AWC

问题不在(*.js)上,它在调用未直接连接到窗口实例的方法时失败

解决方法是将方法注册到窗口对象。为了简化这个过程,我创建了一个JavaScript助手,如下所示:

<script type="text/javascript">
function createDelegate(instance, method) {
    return function () {
        return method.apply(instance, arguments);
    }
}
function registerBroker(prefix, brokerInstance) {
    for (var prop in brokerInstance)
        //uncomment the IF statement to only include properties 
        //starting with upper case letter.
        //if (prop.charAt(0) >= 'A' && prop.charAt(0) <= 'Z') 
             eval("window."+prefix+"_" + prop + "= createDelegate(brokerInstance, brokerInstance[prop]);");
}
</script> 
就这样

例如:

<script type="text/javascript">
    var broker = new FrameworkEventBroker();
    registerBroker("FrameworkEventBroker",broker);
</script>
更新


我添加了createDelegate帮助程序,以便在调用窗口对象时维护对代理实例的引用。

问题不在于(*.js),而在于调用未直接连接到窗口实例的方法时失败

解决方法是将方法注册到窗口对象。为了简化这个过程,我创建了一个JavaScript助手,如下所示:

<script type="text/javascript">
function createDelegate(instance, method) {
    return function () {
        return method.apply(instance, arguments);
    }
}
function registerBroker(prefix, brokerInstance) {
    for (var prop in brokerInstance)
        //uncomment the IF statement to only include properties 
        //starting with upper case letter.
        //if (prop.charAt(0) >= 'A' && prop.charAt(0) <= 'Z') 
             eval("window."+prefix+"_" + prop + "= createDelegate(brokerInstance, brokerInstance[prop]);");
}
</script> 
就这样

例如:

<script type="text/javascript">
    var broker = new FrameworkEventBroker();
    registerBroker("FrameworkEventBroker",broker);
</script>
更新

我添加了createDelegate帮助器,以便在调用window对象时维护对代理实例的引用