Javascript IE中的Silverlight控件缓存
大家好,我们有一个silverlight控件托管在一个隐藏的div和height 0px中,当用户单击页面上的按钮时,它会显示在jquery对话框中 对话框的初始显示调用onLoad参数并正确初始化silverlight控件。但是,用户可以选择关闭对话框并隐藏silverlight控件 然后,用户无需重新加载页面即可再次显示此对话框,然而,在IE中,onLoad参数未触发,因此我们的silverlight控件在处理其中的硬件时未正确初始化。然而,在Chrome中,每次显示jquery对话框时都会触发onLoad参数 两种截然不同的行为。我无法从dom中删除隐藏的div,因为可能再次需要它 是否有强制重新加载silverlight控件的解决方案,以便每次使用jquery对话框显示控件时都触发param onLoad 短暂性脑缺血发作Javascript IE中的Silverlight控件缓存,javascript,silverlight,internet-explorer,silverlight-5.0,Javascript,Silverlight,Internet Explorer,Silverlight 5.0,大家好,我们有一个silverlight控件托管在一个隐藏的div和height 0px中,当用户单击页面上的按钮时,它会显示在jquery对话框中 对话框的初始显示调用onLoad参数并正确初始化silverlight控件。但是,用户可以选择关闭对话框并隐藏silverlight控件 然后,用户无需重新加载页面即可再次显示此对话框,然而,在IE中,onLoad参数未触发,因此我们的silverlight控件在处理其中的硬件时未正确初始化。然而,在Chrome中,每次显示jquery对话框时都会
安德鲁我不确定我有什么总体想法。提高超负荷绝对不是件好事。 但让我提出上述解决方案 在JS和silverlight中注册通信objectsaka函数。因此,您将能够与JS->Silverlight进行通信
<script type="text/javascript">
function updateSilverlight() {
// call silverlight control method
var control = document.getElementById("silverlightControl");
control.Content.Page.SomeMethod("someData');
}
</script>
在SomePage中注释适当的方法
[ScriptableMember]
public void SomeMethod(string somedata)
{
var data = somedata;
}
其中数据是您的重新初始化参数
希望有帮助下面是打开包含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控件时,有一个对SilverlightInitialization的方法调用:
function onSilverlightLoad(sender, eventargs) {
.....
pluginElem.Content.SR_SMT.SilverlightInitialisation(inputArray);
}
由可选的silverlight参数调用:
<param name="onload" value="onSilverlightLoad" />
但是,当在IE中再次显示对话框时,除非用户刷新页面,否则永远不会调用SilverlightInitialization方法
解决方法是将方法OnLoad更改为silverlight控件,该控件在对话框打开时始终被调用,但检查标志hasload以查看它之前是否已加载:
银光
[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中,初始化从未被多次调用
希望所有这些都有意义-但我必须记录它以备将来参考是的,设置相当复杂。但是,设法找到一个答案,我将在下面添加“技术感知”中的“它很好”。这只是另一种方法,可以做到这一点,并将肯定的工作。此外,您可能会发现关于onLoad的对话很有用
[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;
}
open: function (event, ui) {
try {
var plugin = document.getElementById('SilverlightMainControl');
if (plugin) {
plugin.Content.SR_SMT.OnLoad();
}
}
catch(e){}
},