2 Stimmen

Silverlight 5 und Safari 5 Browser

Wir haben kürzlich auf Silverlight 5 aktualisiert. Wir erhalten die folgende Ausnahme, wenn wir im Safari 5-Browser ausführen...

Kann Objekt des Typs "System.Windows.Browser.HtmlElement" nicht in Typ "System.Windows.Browser.HtmlWindow" umwandeln.

Wie können wir dieses Problem lösen?

1voto

DanTheMan Punkte 3247

Wir haben das kürzlich auch bekommen. Das erste Problem ist, dass Safari nicht auf der offiziellen Liste der unterstützten Browser steht, daher wird, auch wenn es zuvor funktioniert hat, nicht garantiert, dass es wieder funktioniert.

Ich vermute, Sie verwenden eine Silverlight Business-Anwendung mit Navigation? Oder ich glaube, jede Business-Anwendung wird dieses Problem reproduzieren. Den Weg, wie ich es behoben habe (hier gefunden), ist, den Hauptinhalt Rahmen in MainPage.xaml (oder das Äquivalent, wenn Sie es geändert haben) wie folgt einzufügen:

`Dies unterbricht die Navigation hin und her. Wir werden noch ein wenig herumspielen und versuchen, dies NUR für Safari zu setzen, aber das sollte Sie zumindest auf den richtigen Weg bringen!

EDIT: Leicht nur für Safari in Code-Behind erhalten:

if ( HtmlPage.BrowserInformation.UserAgent.Contains("Safari") )
{
    ContentFrame.JournalOwnership = JournalOwnership.OwnsJournal;
}`

0voto

harryhazza Punkte 117

Nicht sicher, ob dies hilfreich sein wird, aber der folgende Workaround funktioniert für mich mit SL5 und allen Browsern unter Windows für meinen spezifischen Anwendungsfall. Wir laden die Hostseite aus einer anderen Anwendung, die Informationen über die Query-String übergibt. Ich habe zuvor verwendet

foreach (var key in HtmlPage.Document.QueryString.Keys)

um die Query-String-Keys und -Werte zu erhalten und entsprechend zu verarbeiten. Da HtmlPage.Document nicht mehr quellenübergreifend ist, habe ich alle Alternativen ausprobiert, bin aber schließlich dazu gekommen, einen .NET-Typ zu erstellen, der von Javascript (JS) aufgerufen werden konnte. Wenn die Hostseite geladen wird, verwende ich JS, um den Query-String zu extrahieren und diesen in den .NET-Typ zu übergeben.

Um dies zu tun, fügen Sie Ihrer Hostseite dies hinzu:

und etwas JS:

     function plugInLoaded(sender) { // Code zum Setzen von Werten in Ihren .NET-Typ }

Die Herausforderung für mich bestand darin, dass unsere SL-Seite sofort nach dem Rendern der Hauptsteuerung eine HTTP-Anfrage stellen muss, um Daten zu erhalten. Wir verwenden keine RIA-Dienste. Die meisten Beispiele auf MSDN zum Übergeben von Daten von JS an .NET beinhalten einen Klick auf eine Schaltfläche. Es gab eine Wettlaufbedingung, bei der der JS-Code den Wert auf den .NET-Typ setzte, nachdem die SL-Steuerungen gerendert worden waren. Die Verwendung des Dispatchers löste dieses Problem.

Dispatcher.BeginInvoke(() => { // Code, um den Wert aus dem .NET-Typ zu erhalten }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X