我想使用外部瀏覽器窗口在Silverlight應用程序中實現預覽功能。有一個項目列表,當用戶點擊其中一個項目時,它會在一個單獨的瀏覽器窗口中打開(內容是一個pdf文檔,這就是爲什麼它在SL應用程序的外部處理)。使用Silverlight 3的HtmlPage.Window.Navigate方法重用已打開的瀏覽器窗口
現在,爲了實現這一目標,我只是用
HtmlPage.Window.Navigate(new Uri("http://www.bing.com"), "_blank");
工作正常。
現在我的客戶不喜歡每次點擊打開一個新的瀏覽器窗口的事實。他希望每次單擊某個項目時都會重新使用瀏覽器窗口。所以,我走了出去,並試圖實現這一點:
選項1 - 使用導航方法的過載,像這樣:
HtmlPage.Window.Navigate(new Uri("http://www.bing.com"), "foo");
我是假設該窗口將被再次使用時,相同的目標參數值(foo)將在隨後的調用中使用。
這不起作用。我每次都會看到一個新窗口。
選項2 - 使用在HtmlPage
HtmlPage.PopupWindow(new Uri("http://www.bing.com"), "blah", new HtmlPopupWindowOptions());
這不起作用PopupWindow方法。我每次都會看到一個新窗口。
選項3 - 獲取的句柄打開的窗口和重用,在後續調用
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");
}
這是行不通的。我爲PopupWindow()方法嘗試了相同的操作,並且每次窗口都爲空,因此每次點擊都會打開一個新窗口。我已經檢查了EnableHtmlAccess和IsPopupWindowAllowed屬性,它們返回true,as they should。
選項4 - 使用eval方法來執行一些自定義的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);
}
這是行不通的。我每次都會看到一個新窗口。
選項5 - 使用的CreateInstance運行一些自定義JavaScript頁面
private void navigationButton_Click(object sender, RoutedEventArgs e)
{
HtmlPage.Window.CreateInstance("thisIsPlainHell");
}
上,並在我的aspx我有
function thisIsPlainHell() {
var popup = window.open('http://www.bing.com', 'blah');
}
這是行不通的。我每次都會看到一個新窗口。
我做錯了什麼?我絕對沒有JavaScript專家,所以我希望這是我在這裏失蹤的事情。
乾杯, 菲爾
對不起,我使用 HtmlPage.Window.Navigate(新的URI( 「http://www.bing.com」), 「_blank」); atm,它工作正常,因爲我想讓它在新窗口中打開。 – Phil 2010-03-24 10:12:11