3

Silverlight 응용 프로그램에서 미리보기 기능을 구현하려면 외부 브라우저 창을 사용하고 싶습니다. 항목 목록이 있으며 사용자가 이러한 항목 중 하나를 클릭 할 때마다 별도의 브라우저 창에서 열립니다 (내용은 PDF 문서이므로 SL 응용 프로그램의 외부에서 처리됩니다). Silverlight 3의 HtmlPage.Window.Navigate 메서드를 사용하여 이미 열려있는 브라우저 창을 다시 사용합니다.

지금, 이것을 달성하기 위해, 나는 단순히 잘 작동

HtmlPage.Window.Navigate(new Uri("http://www.bing.com"), "_blank"); 

사용합니다.

내 고객은 클릭 할 때마다 새 브라우저 창이 열리는 것을 좋아하지 않습니다. 그는 항목을 클릭 할 때마다 브라우저 창을 다시보고 싶습니다. 그래서 내가 나가서이 구현하는 시도 :

옵션 1 -과 같이, Navigate 메서드의 오버로드를 사용

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() 메서드에 대해서도 똑같은 방법을 시도했는데 매번 널 (null)이되었으므로 매번 클릭 할 때마다 새 창이 열립니다. EnableHtmlAccess 및 IsPopupWindowAllowed 속성을 모두 확인한 후 true를 반환합니다 (as they should).

옵션 4 - 사용 평가 방법이 작동하지 않는 자바 스크립트

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 페이지

private void navigationButton_Click(object sender, RoutedEventArgs e) 
{ 
    HtmlPage.Window.CreateInstance("thisIsPlainHell"); 
} 

에 내 영문으로 나는이 작동하지 않습니다

function thisIsPlainHell() { 
    var popup = window.open('http://www.bing.com', 'blah'); 
} 

이 자바 스크립트 일부 사용자 지정을 실행합니다. 나는 매번 새로운 창을 쓴다.

내가 잘못 했나요? 나는 확실히 자바 스크립트 전문가가 아니므로 여기에서 분명한 것은 분명합니다.

건배, 필

답변

0

분명히 문제는 window.name 속성이 bing.com으로 이동할 때 손실된다는 것입니다. 내 사용자 지정 페이지 중 하나를 탐색 할 때 정상적으로 작동하는 것 같습니다.

0

당신이이 문제를 일으키는 브라우저 설정이 아닙니다 확실 해요?HtmlPage.Window.Navigate(new Uri(url))을 사용하고 항상 내 실버 라이트 컨트롤이있는 현재 탭을 탐색합니다.

+0

죄송합니다. 사용 중입니다. HtmlPage.Window.Navigate (새 Uri ("http://www.bing.com"), "_blank"); atm, 새로운 창에서 열어서 좋겠다. – Phil

3

이것은 브라우저의 보안 기능입니다. 명명 된 창의 재사용은 해당 창에 표시된 현재 문서의 도메인으로 제한됩니다.

Silverlight 컨트롤을 호스팅하는 페이지는 "http://www.yoursite.com"에서 실행되므로 "http://www.yoursite.com"의 콘텐츠도 현재 표시하고있는 경우 "foo"라는 창만 다시 사용할 수 있습니다. 해당 창에 "http://www.bing.com"이로드되었으므로 컨텍스트 "http://www.yoursite.com"에서 실행중인 코드에서 더 이상 볼 수 없습니다. 그러므로 "Foo"를 사용하여 창을 열면 브라우저는 그 이름을 가진 현재 창을 보지 못하며 따라서 다른 창을 생성합니다.

관련 문제