2013-07-09 19 views
5

Utworzyłem stronę aplikacji ASP.Net do obsługi otwierania łączy FileSite. Istnieje niestandardowy protokół, który poprawnie obsługuje linki, tzn. Otwiera pliki, jednak pozostawia mi pustą stronę przeglądarki podczas uruchamiania pliku.Zamknij okno przeglądarki po otwarciu Custom Protocol

mam 3 scenariusze Pracuję z

  1. linki bezpośrednio do strony obsługi uruchomi plik i zamknąć przeglądarkę
  2. łącza z innej strony w Intranecie rozpocznie obsługi strony, otwórz plik i powrócić do strony pochodzącej
  3. Links z okna dialogowego w intranecie otworzyć stronę manipulacyjną, uruchom plik, a następnie zamknąć stronę Handling

kodu I jest następujący (kodzie jest ustawienie FileUrl i wybierając które funkcjonują zadzwonić z dwóch)

<script type="text/javascript" language="javascript"> 

    // Files opened directly from link 
    function OpenFileSiteLink() { 
     window.location.href = '<%= FileUrl %>'; 
    } 

    // Files opened from within Intranet 
    function OpenFileSiteLinkReferrer(referrer, dialogOpened) { 

     window.open('<%= FileUrl %>'); 

     if (dialogOpened) { 
      window.open('close.html', '_self'); 
     } else { 
      window.location.href = referrer; 
     } 
    } 

</script> 

kod w pliku close.html dopiero następujące

<script type="text/javascript"> window.close();</script> 

ta została podjęta z How can I close a browser window without receiving the "Do you want to close this window" prompt?

Wszelkie sugestie jak mogę otworzyć protokół, aby uruchomić aplikację bez dodatkowego okna dialogowego zostanie docenione

Odpowiedz

4

Najmniej hacky i najbardziej niezawodny sposób na to jest najbardziej irytujące do wdrożenia. Niestety, IE 9/10 i Firefox podłączyły standardowe metody realizacji tego, więc nie masz innego wyjścia.

Strategia ma wejść w okienko podręczne z okna nadrzędnego, zamiast otwierać je bezpośrednio. Musisz utworzyć funkcję, aby załadować odpowiedni adres URL w wyskakującym okienku, a następnie zastosować go do kliknięcia każdego linku w linkach do adresu URL programu obsługi. Następnie umieść ten skrypt na każdej stronie w swojej witrynie. Zakładam również, że każdy adres URL pliku jest niepowtarzalny, ale ma wspólny adres URL. Jeśli tak nie jest, konieczne będzie również ustawienie klasy lub atrybutu identyfikującego. Funkcja zrobić wymianę byłoby coś wzdłuż linii:

var replaceHandlerLinks = function() { 
    var fileLinks = document.querySelectorAll("[href*='/beginning/to/file/path']"); 
    for (var i = 0; i < fileLinks.length; i++) { 
     fileLinks[i].onclick = function() { 
      var fileOpener = window.open(fileLinks[i].href); 
      //depending on how long your file takes to load, you may need to wait here 
      fileOpener.close(); 
     } 
    } 
} 

Oczywistą wadą jest to, że każde ogniwo do tych plików musiałyby pochodzić od stron, które kontrolują. Dodatkowo zauważ, że używam document.querySelectorAll do kierowania na element href link. Oznacza to, że przyciski itp. Nie będą działać z tą konkretną funkcją. Użycie bardziej zgodnego z przeglądarką/solidnego zapytania z JQuery lub ustawienie klasy na wszystkich wymaganych przyciskach, łączach itp. Uczyniłoby to bardziej kompletnym podejściem.

Innym podobnym podejściem, jeśli chcesz połączyć ze stron, które nie kontrolujesz, byłoby zawsze link do tej samej strony z wszędzie z parametrem, np. "/openfile.aspx?file = actualFilePath ", następnie z tej strony otwórz okno podręczne, aby załadować plik, obejrzyj nowe okno i zamknij je po zakończeniu pliku. Następnie spróbuj przekierować bieżące okno na podstawie scenariusza: 1) przejdź do strony głównej/landing/itp. 2) przejdź do strony odsyłającej 3) przejdź do strony docelowej/strony odsyłającej w intranecie, jeśli to możliwe.To nie jest tak eleganckie jak zamknięcie wyskakującego okna z poziomu samej siebie, ale odnosi się do brzydkiego pustego okna:

Żadne z podejść nie jest idealne, ale poza ograniczenie użytkownikom ie8- i chrom, może nie mieć innego wyboru.

2

A co, jeśli spróbujesz przejść do zamiast nowego okna?

Spróbuj dodać nową do DOM, przejdź do niestandardowego adresu URL, a następnie usuń z DOM. Nie przejmuj się ładowaniem strony close.html.

(disclaimer: szczerze mówiąc, to tylko pomysł, zrobiłem nie próbował)

+0

Dzięki za podpowiedź, będę to sprawdzić i wysłać z powrotem –

Powiązane problemy