嗨我们有一个隐藏div(和高度为0px)的silverlight控件,当用户点击页面按钮时,它会显示在jquery对话框中 对话框的初始显示调用onLoad参数并正确初始化silverlight控件。但是,用户可以选择关闭对话框并隐藏silverlight控件。
然后,用户可以再次显示此对话框(无需重新加载页面),但是,在IE中,onLoad参数未被触发,因此我们的Silverlight控件未正确初始化,因为我们正在处理其中的硬件。但是,在Chrome中,每次显示jquery对话框时都会触发onLoad参数
两种截然不同的行为。我无法从dom中移除隐藏的div,因为它可能需要再次使用
是否有强制重新加载silverlight控件的解决方案,以便每次使用jquery对话框显示控件时都会触发param onLoad?
TIA 安德鲁
答案 0 :(得分:0)
不确定我是否有一个整体想法。提升onLoad绝对不是好事。 但是让我建议上面的解决方案。
在JS和silverlight中注册通信对象(也称为函数)。所以你将能够沟通JS - > Silverlight
<script type="text/javascript">
function updateSilverlight() {
// call silverlight control method
var control = document.getElementById("silverlightControl");
control.Content.Page.SomeMethod("someData');
}
</script>
注释这样的类:
[ScriptableType]
public partial class SomePage: UserControl
{
在SomePage中注释适当的方法
[ScriptableMember]
public void SomeMethod(string somedata)
{
var data = somedata;
}
数据是你的重新启动参数......
希望有所帮助
答案 1 :(得分:0)
下面是打开包含silverlight控件的对话框的代码
$('#ReadCard').on('click', function (e) {
$('#silverlightControlHost').height('300');
e.preventDefault();
//show the read card dialog
$("#readCardDialog").dialog({
autoOpen: true,
height: 390,
width: 550,
modal: true,
resizable: false,
buttons: {
'Close': function () {
Call_SL_OnBeforeUnload();
$(this).dialog("close");
}
}
});
});
在加载silverlight控件时,有一个方法调用SilverlightInitialisation:
function onSilverlightLoad(sender, eventargs) {
.....
pluginElem.Content.SR_SMT.SilverlightInitialisation(inputArray);
}
可选的silverlight参数调用了:
<param name="onload" value="onSilverlightLoad" />
这启动了silverlight控制器正在与之交谈的硬件。
当对话框关闭时,调用该方法来停止硬件:
Call_SL_OnBeforeUnload();
然而,当在IE中再次显示对话框时,除非用户刷新页面,否则永远不会调用SilverlightInitialisation方法。
解决方法是将方法(OnLoad)更改为在打开对话框时始终调用的silverlight控件,但是检查了一个标志(hasLoaded)以查看它是否先前已加载:
Silverlight的
[ScriptableMember]
public string OnLoad()
{
string retVal = G4T.SilverlightBadge.Resources.ResourcesFile.Present_Card;
if (_badgeReadCtrl != null && hasLoaded)
{
if (!_badgeReadCtrl.Initialise())
{
retVal = "Failed to initialise reader device";
}
}
return retVal;
}
添加了OnFirstLoad方法,该方法在首次加载silverlight控件时调用,并相应地设置标记
[ScriptableMember]
public string OnFirstLoad()
{
string retVal = G4T.SilverlightBadge.Resources.ResourcesFile.Present_Card;
if (_badgeReadCtrl != null)
{
if (!_badgeReadCtrl.Initialise())
{
retVal = "Failed to initialise reader device";
}
}
hasLoaded = true;
return retVal;
}
的Javascript
open: function (event, ui) {
try {
var plugin = document.getElementById('SilverlightMainControl');
if (plugin) {
plugin.Content.SR_SMT.OnLoad();
}
}
catch(e){}
},
就像我上面所说的那样,这一直在Chrome中没有修改,但在IE中,初始化从未被调用过多次
希望这一切都有意义 - 但我必须将其记录下来以备将来参考