Хорошо, у меня есть приложение Silverlight 4 на странице с парой баннеров. В зависимости от некоторых переменных в приложении Silverlight мне нужно показать один из баннеров и переместить приложение Silverlight так, чтобы оно совпало с нижней частью баннера. Для этого я использую HtmlPage.Window.Invoke ("MethodToShowTheBannerIWant"). У каждого баннера есть своя собственная функция, которая пытается показать правильный баннер и правильно расположить приложение. Что-то вроде
function ShowFirstBanner() {
FirstBannerStyle.style.display = 'block';
SilverlightAppStyle.style.marginTop = '120px';
SilverlightAppStyle.style.height = '495px';
}
Каждый баннер выглядит как
<table id="FirstBannerStyle" style="position:absolute;top:0px;left:0px;display:none;height:50px;" width=100% border="0" cellpadding="0">
<tr>
<td><img src="http://www.bannerimageurl.jpg" usemap="#Map2" border="0"></td> </table>
с такой картой
<map name="Map2"><area shape="poly" coords="763,19,769,91,985,92,981,69" href="http://www.xxxxxxx.com/cal.htm" target="_self" />
<area shape="rect" coords="11,73,88,89" href="http://www.xxxxxxx.com/index.htm" target="_self">
<area shape="rect" coords="121,70,186,88" href="http://www.xxxxxxx.com/courses.htm" target="_self">
<area shape="rect" coords="217,70,327,90" href="http://www.xxxxxxx.com/ts.htm">
<area shape="rect" coords="365,70,521,91" href="http://www.xxxxxxx.com/po.htm">
<area shape="rect" coords="556,71,618,91" href="http://www.xxxxxxxx.com/au.htm" target="_self">
<area shape="rect" coords="655,72,726,91" href="http://www.xxxxxxx.com/CU/index.htm" target="_self">
</map>
и область приложения Silverlight выглядит следующим образом
<form id="form1" runat="server" style="height:100%">
<div id="silverlightControlHost" style="height:100%;text-align:center">
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/XXX.XXX.XXX.xap"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="4.0.50826.0" />
<param name="autoUpgrade" value="true" />
<param name="InitParams" value=<%=System.Configuration.ConfigurationManager.AppSettings.GetValues(0).FirstOrDefault()%>/>
<param name="windowless" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
</a>
</object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
<div id="InvisibleFrame"></div>
</form>
Проблема, с которой я столкнулся, заключается в том, что этот процесс прекрасно работает в IE8, но совсем не работает в IE9 или Firefox. Когда мой код попадает в HtmlPage.Window.Invoke ("ShowFirstBanner"), он застревает прямо там и никогда не перемещается за эту строку, но не отображает никаких сообщений об ошибках и вместо этого просто будет сидеть неопределенно долго, ожидая завершения этой команды. Если я закомментирую код с функцией, он сделает вызов и продолжит работу как обычно. Так что что-то, связанное с тем, как я обновляю стили Firefox и IE9, не нравится. У кого-нибудь есть идея, как это сделать во всех браузерах?