的問題是不與(*的.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>
然後你只需調用券商方法爲:
HtmlPage.Window.Invoke(
string.Format("{0}_{1}", PREFIX, METHOD_NAME), Args);
就是這樣。
實施例:
<script type="text/javascript">
var broker = new FrameworkEventBroker();
registerBroker("FrameworkEventBroker",broker);
</script>
和從Silverlight的:
HtmlPage.Window.Invoke("FrameworkEventBroker_publishFrameworkEvent", topic, jsonObject);
UPDATE
我添加createDelegate方法輔助保持到代理實例的引用的窗口對象上調用時。