2010-08-05 10 views
7

C'è un modo per controllare all'interno di un browser (ad esempio javascript) se l'utente è in esecuzione all'interno di una sessione di Desktop remoto?Come rilevare, dal browser, se l'utente è in esecuzione nella sessione di Desktop remoto?


Se l'utente esegue il browser all'interno di un desktop remoto (vale a dire Terminal Services), voglio disabilitare le animazioni sul web-site.

Se questo fosse un'applicazione nativa, al contrario di un sito web, ho potuto effettuo questo controllo utilizzando:

//Native code 
isRemoteSession = GetSystemMetrics(SM_REMOTESESSION); 

o

//Managed Code: 
isRemoteSession = System.Windows.Forms.SystemInformation.TerminalServerSession; 

Esiste un controllo simile che può essere fatto all'interno del browser?

Nota: assumere per i fini di questa discussione che il browser di cui stiamo parlando è Internet Explorer     8.


Aggiornamento One: Forse qualcosa in How can you get the terminal service client machine name from javascript?

+1

+1 perché sarebbe un ottimo miglioramento dell'usabilità per molti siti. –

risposta

1

Forse puoi leggere la variabile d'ambiente SESSIONNAME? Per una sessione della console dovrebbe essere CONSOLE e per una sessione RDP dovrebbe essere RDP-TCP seguito da un numero.

+0

Lettura delle variabili di ambiente con il client Javascript nel browser? Ne dubito. – Joey

0

Suppongo che si stia parlando di un server terminal aziendale specifico, non di un server terminal. Non è possibile pubblicare animazioni sull'indirizzo IP specifico del TS.

+0

No, qualsiasi terminal server. Se si esegue l'RDP sul computer di casa al lavoro e si naviga nella mia pagina Web: le animazioni non dovrebbero essere riprodotte. –

1

È possibile esporre il codice di rilevamento tramite ActiveX o BHO (ad esempio assign a property to the window object in BHO) se si utilizza IE.

In caso contrario, se si sta utilizzando un lettore ActiveX per riprodurre l'animazione, controllare la documentazione del lettore per verificare se regola automaticamente la frequenza dei fotogrammi in Desktop remoto.

È sempre possibile offrire una versione con larghezza di banda ridotta del proprio sito Web e indicare all'utente di scegliere il sito Web anziché il normale sito Web se la riproduzione del video non è soddisfacente.

per le punte in scrittura di un terminale service-aware grafica app, controllare graphic effects consideration, e il general performance guidelines

+1

"Consenti all'utente di scegliere una versione a larghezza di banda ridotta" è la risposta corretta. –

+0

Ben, non proprio come quello richiede ancora il caricamento della pagina una volta prima di poter scegliere. Inoltre, la larghezza di banda necessaria non è in realtà il problema su RDP, sono animazioni, immagini di grandi dimensioni, ecc. Poiché rendono la navigazione di un sito quasi inutilizzabile tramite RDP (poiché gli aggiornamenti di visualizzazione interferiscono con l'interazione). – Joey

9

La mia soluzione è quella di utilizzare i CSS @media query per i valori massimi del color media feature minimo e massimo. Sulla base dell'esperimento, RDP sembra avere solo 5 bit per colore, piuttosto che 8 bit per colore del desktop tipico.

Questa soluzione è, naturalmente, non perfetta, perché otterrai molti falsi positivi da persone che non si trovano su RDP, ma che si presentano con display a bassa intensità di colore. Tuttavia:

  • Se ci si trova in un ambiente relativamente controllato come una intranet aziendale, si potrebbe essere più sicuri del fatto che "bassa profondità di colore" = "RDP".
  • Molti degli elementi visivi che devono essere regolati per RDP su una pagina Web, devono essere regolati proprio perché della profondità di colore bassa (gradienti, dissolvenze, animazione, ecc.), e quindi ha effettivamente senso testare la profondità del colore piuttosto che RDP di per sé.

Ecco un esempio che funziona per me nella recente versione di Firefox e Chrome. Guarda lo screenshot qui sotto.

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Test RDP detection</title> 
     <style type="text/css"> 
      @media all { li.color { display: none; } } 
      @media all and (min-color: 1) { li.color.color-depth-1 { display: block; } } 
      @media all and (min-color: 2) { li.color.color-depth-2 { display: block; } } 
      @media all and (min-color: 3) { li.color.color-depth-3 { display: block; } } 
      @media all and (min-color: 4) { li.color.color-depth-4 { display: block; } } 
      @media all and (min-color: 5) { li.color.color-depth-5 { display: block; } } 
      @media all and (min-color: 6) { li.color.color-depth-6 { display: block; } } 
      @media all and (min-color: 7) { li.color.color-depth-7 { display: block; } } 
      @media all and (min-color: 8) { li.color.color-depth-8 { display: block; } } 

      /* 5 bits per color seems to be the max for RDP */ 
      @media all and (max-color: 5) { 
       .not-rdp { display: none; } 
      } 
      @media all and (min-color: 6) { 
       .rdp-only { display: none; } 
      } 
     </style> 
    </head> 
    <body> 
     <p>This page uses CSS <tt>@media</tt> queries to detect whether you 
      are viewing it over RDP&mdash;heuristically, by looking at the 
      color depth of your display.</p> 

     <ul> 
      <li class="color color-depth-1">Your display is not monochrome!</li> 
      <li class="color color-depth-2">Your display has at least 2 bits per color.</li> 
      <li class="color color-depth-3">Your display has at least 3 bits per color.</li> 
      <li class="color color-depth-4">Your display has at least 4 bits per color.</li> 
      <li class="color color-depth-5">Your display has at least 5 bits per color.</li> 
      <li class="color color-depth-6">Your display has at least 6 bits per color.</li> 
      <li class="color color-depth-7">Your display has at least 7 bits per color.</li> 
      <li class="color color-depth-8">Your display has at least 8 bits per color.</li> 
     </ul> 

     <p>You are <span class="not-rdp">not</span> using RDP.</p> 
     <p class="rdp-only">This is only visible over RDP.</p> 
    </body> 
</html> 

screenshot showing test page with and without RDP

Un altro approccio lungo queste linee è quello di utilizzare javascript per esaminare il valore della variabile screen.colorDepth.

+1

Questo è molto intelligente! –

+2

Si noti che la profondità del colore è configurabile nel client RDP: vedere il menu a discesa Avanzate/Display/Colori. –

+1

Ho appena creato un violino per far sì che le persone testino rapidamente: https://jsfiddle.net/7cqqpeqe/ - non sembra funzionare più come un metodo. – PhonicUK

1

Questo non dovrebbe essere fatto o deciso dalla vostra applicazione. Su client RDP (come MS RDC), l'utente può scegliere di disabilitare le animazioni ecc. L'utente può anche disabilitarle sul lato server (Terminal server o host RDP)

+0

Le opzioni di prestazioni della connessione RDP (come animazioni, sfondi, ecc.) Non sono esposte a applicazioni browser e browser renderanno le animazioni CSS/JavaScript indipendentemente dalle impostazioni RDP. Fino a quando non viene esposta un'API per vedere se le animazioni e altre funzionalità devono essere disabilitate in un'applicazione web, tutto ciò che possiamo fare sono piccoli trucchi per rilevare l'ambiente. – Dai