Silverlight app disappears on page refresh in IE10

偶尔善良 提交于 2019-11-27 14:08:50

问题


UPDATE: There is a workaround to the problem. It is to force IE10 into compatibility mode by including one of the following meta tags:

<meta http-equiv="x-ua-compatible" content="IE=7" />
<meta http-equiv="x-ua-compatible" content="IE=8" />

This is not really a perfect solution for various reasons, but it eliminates the problem at least.


ORIGINAL QUESTION:
I realised a couple of months ago that there is a problem with our Silverlight application in IE10 on Windows 8 (I have not tried the IE10 preview for Windows 7). When the asp.net page hosting our SL app first loads everything works fine and the application loads as expected. If I refresh the page immediately, it also reloads as expected. But: If I focus the Silverlight application by clicking in it and THEN hit F5, it just goes blank. It is like the plugin disappears completely. If I trace the requests using Fiddler I can see that no request is issued for the xap file. I have been hoping that this would be fixed in a patch release for IE10, but so far nothing has changed. I cannot find any information about this when I try googling it. It seems highly unlikely that I should be the first person to discovered it and I am quite surprised that I am not finding more information. To reproduce the issue:

  • Create a new Silverlight application
  • Add some sort of content to MainPage.xaml, like a Button or whatever
  • Run the app in IE10 (on Win8)
  • Click anywhere within the Silverlight application. This is just to focus the plugin.
  • Refresh the page (F5)
  • Result: The Silverlight application does not load and the page is blank.

A few observations:

  • After the steps above, no amount of refreshing will bring the application back.
  • After the steps above, if I re-enter the url into the address bar and hit Enter, the application loads as expected.
  • If I enable Compatibility View in IE, the app also loads as expected. Nothing I do will reproduce the bug when compatibility view is enabled.

Now to my questions:

  1. Has anyone else observed this behaviour?
  2. If so, have you found a workaround?

回答1:


I'm seeing the same issue with my Silverlight application in IE 10.

I've tried adding the IE 8 compatibility meta tag suggested above, but this does not resolve the problem consistently. It seems to work only intermittently, after say every 5th refresh attempt?!

The only way I can see to work around this consistently is to force the Browser Mode into "IE 10 Compatibility View", and I don't think this can be done via page content (meta tag, etc.)? I've had to remove the IE 8 compatibility meta tag so that the "Compatibility View" button is available in the address bar, and then ask users to click the compatibility button, which is then remembered for the site. This results in the browser entering Browser Mode: "IE 10 Compat View" and Document Mode: "IE7 Standards". The refresh behaviour then works consistently as expected and as it used to.

This is a big problem for us. We've built our Silverlight app such that the browser refresh button is used to refresh pages/content within the app (the users stays logged in, etc.). It's really bad that we have to ask users to set our site to run in compatibility mode for the refresh functionality to work as expected.

Note that this still works as expected in Chrome. It seems silly that we might need to recommend that our users use Chrome because of this issue!

UPDATE:

A workaround for this seems to be to always load the Silverlight object into its hosting page dynamically using JavaScript.

E.g.

function onLoad() {
  var silverlightControlHost = document.getElementById("silverlightControlHost");
  silverlightControlHost.innerHTML = "<object ...

UPDATE 2:

Here is the latest code I use to work around this issue:

...
        function unloadSilverlight() {
            document.getElementById("silverlightControlHost").innerHTML = "";
        }

        function focusOnSilverlight() {
            document.getElementById("silverlightObject").focus();
        }

        function onLoad() {
            window.onbeforeunload = unloadSilverlight;
            setTimeout(focusOnSilverlight);
        }
    </script>
</head>
<body onload=" onLoad() ">
...



回答2:


I still had issues with the solution presented by Chris.

This works perfectly for me though:

window.onbeforeunload = function () {
            var silverlightControlHost = document.getElementById("silverlightControlHost");
            silverlightControlHost.innerHTML = "";
        }



回答3:


I solved the problem in a very easy way. I Wrote a javascript code at the end of the page (or after the object tag in where is your silverlight app) and set the focus to another element, for example, a link. Example:

<object id="silverlightHostControl">...bla bla bla</object> <script type="text/javascript" language="javascript"> var shc = document.getElementById("silverlightHostControl"); document.getElementById("myLink").focus(); </script>

The shc var is useless, I put just for clarify. Remember: your javascript code must set the focus to another (but focusable) object AFTER the silverlight app object tag was parsed, which means your js code is writen after silverlight app object.




回答4:


In answer to your question #1, this is happening with our Silverlight apps as well. The only workarounds are 1) restart the browser or 2) switch to compatibiity mode.

It apparently is a bug in ie10.




回答5:


Thanks for all workarounds solution but this is obviously a bug with Silverlight plugin.

We have raised few tickets directly with Internet explorer development team and they said the issue is from an external problem. It is not a good answer from Microsoft.

Anyway, this time our developers raised ticket through Silverlight development team which still waiting for their response. To get a good response from them, we need to get more people who are facing this issue.

You can vote this issue from Connect website which is Microsoft's official bug reporting platform.

The link to our ticket is: http://connect.microsoft.com/VisualStudio/feedback/details/789004/ie10-shows-blank-page-upon-refreshing-silverlight-app

Cheers

Moh




回答6:


Yeah i am also facing same issue with one my application. If i opens help of my application in IE 10 then i have to refresh the page each time to view the contents.

I have two workaround for this issue: 1. Press ALT key once 2. Open IE in compatible mode



来源:https://stackoverflow.com/questions/13492045/silverlight-app-disappears-on-page-refresh-in-ie10

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!