mit Silverlight 3 ist HtmlPage.Fenster.Navigate-Methode zur Wiederverwendung eines bereits geöffneten browser-Fenster
Will ich mit einem externen browser-Fenster zu implementieren, die Vorschau-Funktion in einer silverlight-Anwendung. Es gibt eine Liste der Elemente, und immer, wenn der Benutzer klickt auf eines dieser Elemente, öffnen in einem separaten browser-Fenster (der Inhalt ist ein pdf Dokument, welches ist, warum wird Sie so behandelt, auch außerhalb der SL-app).
Nun, um dies zu erreichen, verwenden Sie einfach
HtmlPage.Window.Navigate(new Uri("http://www.bing.com"), "_blank");
welche gut funktioniert.
Nun mein client nicht, wie die Tatsache, dass jeder Klick öffnet ein neues browser-Fenster. Er würde gerne sehen, das browser-Fenster wiederverwendet werden jedes mal, wenn ein Element angeklickt wird. Also ging ich raus und versuchte die Umsetzung dieser:
Option 1 - Verwenden Sie die überladung der Methode Navigieren, etwa so:
HtmlPage.Window.Navigate(new Uri("http://www.bing.com"), "foo");
Ich war der Annahme, dass die Fenster wieder verwendet werden, wenn das gleiche Ziel-Parameterwert (foo) würde verwendet werden, die in nachfolgenden aufrufen.
Funktioniert dies nicht. Ich bekomme ein neues Fenster jedes mal.
Option 2 - Verwenden Sie die Popup-Methode auf die HtmlPage -
HtmlPage.PopupWindow(new Uri("http://www.bing.com"), "blah", new HtmlPopupWindowOptions());
Funktioniert das nicht. Ich bekomme ein neues Fenster jedes mal.
Option 3 - Get ein handle auf das geöffnete Fenster und die Wiederverwendung, das in nachfolgenden aufrufen
private HtmlWindow window;
private void navigationButton_Click(object sender, RoutedEventArgs e)
{
if (window == null)
window = HtmlPage.Window.Navigate(new Uri("http://www.bing.com"), "blah");
else
window.Navigate(new Uri("http://www.bing.com"), "blah");
if (window == null)
MessageBox.Show("it's null");
}
Funktioniert das nicht. Ich habe versucht, das gleiche für die Popup () - Methode und das Fenster ist null, jeder Zeit, so wird ein neues Fenster geöffnet, bei jedem Klick. Ich habe sowohl die EnableHtmlAccess und die IsPopupWindowAllowed Eigenschaften, und Sie true zurück, so, wie Sie sollten.
Option 4 - mit Eval-Methode ausführen einer benutzerdefinierten javascript -
private const string javascript = @"var popup = window.open('', 'blah') ;
if(popup.location != 'http://www.bing.com' ){
popup.location = 'http://www.bing.com';
}
popup.focus();";
private void navigationButton_Click(object sender, RoutedEventArgs e)
{
HtmlPage.Window.Eval(javascript);
}
Funktioniert das nicht. Ich bekomme ein neues Fenster jedes mal.
option 5 - Verwenden Sie CreateInstance zum ausführen von benutzerdefinierten javascript-Code auf der Seite
private void navigationButton_Click(object sender, RoutedEventArgs e)
{
HtmlPage.Window.CreateInstance("thisIsPlainHell");
}
und in meiner aspx-ich habe
function thisIsPlainHell() {
var popup = window.open('http://www.bing.com', 'blah');
}
Funktioniert das nicht. Ich bekomme ein neues Fenster jedes mal.
Mache ich etwas falsch? Ich bin definitiv kein javascript-Experte, so dass ich hoffe, es ist etwas, offensichtlich fehlt mir hier.
Cheers,
Phil
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein Sicherheits-feature des Browsers. Die re-Verwendung von named windows ist beschränkt auf die Domäne des Dokuments Strom wird angezeigt durch das Fenster.
Ihre Seite mit dem Silverlight-Steuerelement ausgeführt wird, von "http://www.yoursite.com" daher kann es nur re-use Fenster mit dem Namen "foo", wenn das Fenster zu ist auch aktuell Inhalte von "http://www.yoursite.com". Da Ihr geladen haben "http://www.bing.com" in diesem Fenster ist es nicht mehr sichtbar ist, um code im Kontext "http://www.yoursite.com". Daher, wenn Sie ein Fenster öffnen mit "Foo" den browser nicht sehen, eine aktuelle Fenster mit diesem Namen, und daher entsteht eine andere.
Sind Sie sicher, es ist nicht eine browser-Einstellung dies verursacht? Ich benutze
HtmlPage.Window.Navigate(new Uri(url))
und es immer wieder wechselt der aktuelle tab, dass meine silverlight-Steuerelement sitzt.Anscheinend ist das problem, dass das Fenster.name-Eigenschaft geht verloren, wenn die Navigation zu bing.com. Wenn ich navigieren Sie zu einer meiner benutzerdefinierten Seiten scheint es einwandfrei zu funktionieren.