2013-07-09 18 views
5

Ho creato una pagina dell'applicazione ASP.Net per gestire i collegamenti di apertura FileSite. Esiste un protocollo personalizzato che gestisce correttamente i collegamenti, cioè apre i file, tuttavia mi lascia con una pagina del browser vuota all'avvio del file.Chiudi finestra del browser dopo l'apertura Protocollo personalizzato

Ho 3 scenari sto lavorando con

  1. Link direttamente alla pagina di gestione lancerà il file e chiudere il browser
  2. link da un'altra pagina sul Intranet lancerà pagina movimentazione, aprire il file e tornare alla pagina di origine
  3. Link da una finestra sulla Intranet aprire la pagina manipolazione, lanciare il file e quindi chiudere la pagina movimentazione

il codice Che ho è il seguente (Codebehind è l'impostazione del fileURL e scegliere quale funzione chiamare dei due)

<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> 

Il codice nel file close.html ha solo le seguenti

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

Questa è stata scattata da How can I close a browser window without receiving the "Do you want to close this window" prompt?

Qualche suggerimento come posso aprire il protocollo per avviare l'applicazione senza la finestra di dialogo aggiuntiva sarebbe apprezzato

risposta

4

Il metodo meno hacky e più affidabile per fare questo è il più fastidioso da implementare. Sfortunatamente, IE 9/10 e Firefox hanno collegato i metodi regolari per realizzare questo, quindi non puoi avere altra scelta.

La strategia è di venire al popup dalla finestra padre, piuttosto che aprirlo direttamente. Dovrai creare una funzione per caricare l'url appropriato in un popup, quindi applicarlo all'on-clic di ogni collegamento sul tuo collegamento all'URL del gestore. Quindi, includi questo script in ogni pagina del tuo sito. Sto anche partendo dal presupposto che ogni url di file è unico, ma ha un URL di base comune di qualche tipo. Se questo non è il caso, dovrai anche impostare una classe o un attributo identificativo. La funzione di fare la sostituzione sarebbe qualcosa sulla falsariga di:

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(); 
     } 
    } 
} 

L'ovvio svantaggio di questo è che qualunque link a questi file dovrebbe provenire da pagine che controlli. Inoltre, si noti che sto usando document.querySelectorAll per indirizzare l'elemento href dei link. Ciò significa che i pulsanti ecc non funzioneranno con questa particolare funzione. L'utilizzo di una query più robusta e compatibile con browser con JQuery o l'impostazione di una classe su tutti i pulsanti, i collegamenti, ecc. Necessari renderebbe questo un approccio più completo.

Un altro approccio simile, se è necessario il collegamento da pagine che non si controllano, sarebbe sempre il collegamento alla stessa pagina da qualsiasi luogo con un parametro, ad esempio "/openfile.aspx?file = actualFilePath ", quindi da quella pagina aprire un popup per caricare il file, guardare la nuova finestra e chiuderla quando il file è terminato. Quindi, tentare di reindirizzare la finestra corrente in base allo scenario: 1) vai alla homepage/landing/etc 2) vai al referrer 3) se possibile, non è elegante come chiudere un popup da se stesso, ma indirizza la brutta finestra vuota

Nessun approccio è perfetto, ma al di fuori della limitazione degli utenti a ie8- e chrome, non si può avere altra scelta.

2

Che dire se provi a navigare in un anziché in una nuova finestra?

Provare ad aggiungere un nuovo al DOM, passare all'URL personalizzato, quindi rimuovere il dal DOM. Non preoccuparti di caricare la pagina close.html.

(disclaimer: a dire il vero, è solo un'idea, non ho fatto provato)

+0

Grazie per il suggerimento, controllerò e postback –

Problemi correlati