Silverlight调用javascript问题?
我使用HtmlPage.Window.Invoke api从一个SL组件调用javascript,当我调用页面中定义的javascript函数(html)时,它会按预期执行,例如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("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对象时维护对代理实例的引用