2012-04-30 4 views
18

Se sei qui solo per dirmi perché ridimensionare una finestra è una cattiva idea, odioso, e l'equivalente web di chiodi su una lavagna allora per favore vai via. Sto cercando una soluzione, non una conferenza. Questo deve essere utilizzato solo in una rete Intranet. In particolare, per eseguire il debug e quindi demo di siti Web progettati responsabilmente (siti che utilizzano le query multimediali in scala) ai clienti per la revisione tramite una riunione Web. Voglio dimostrare punti di rottura specifici. Questo non deve essere scatenato sul pubblico in generale.Come ridimensionare una finestra del browser in modo che la larghezza interna sia un valore specifico

Le cose che mi sanno già:

  1. Si può solo ridimensionare e finestre posizione aperta tramite javascript, non da parte dell'utente. (a meno che non modificino le impostazioni di sicurezza, che non è un'opzione)
  2. Quando si utilizza il metodo resizeTo() della finestra, il browser viene ridimensionato alle dimensioni specificate. Il viewport è spesso molto più piccolo (come in media 30-100 pixel in meno) Tuttavia, voglio ridimensionare la finestra su una dimensione specifica.
  3. Il browser, la versione del browser, la piattaforma, alcuni plugin e vari menu e barre degli strumenti modificano le dimensioni della finestra. Più menu e barre degli strumenti significano che la larghezza della finestra è più piccola.

Soluzione possibile

  1. Trova larghezza e l'altezza del browser
  2. Trova la larghezza della finestra e altezza
  3. Determinare la differenza tra i due.
  4. regolare i valori della mia chiamata a resizeTo() di conseguenza

Ho bisogno di aiuto con la fase 1. Tutto il resto riesco a capire. Sto anche usando jQuery e il modernizzatore se questo aiuta.

Grazie in anticipo per il vostro aiuto!

+1

http://www.quirksmode.org/dom/w3c_cssom.html – AlienWebguy

+0

Bene, eccoci. – mrbinky3000

+0

L'unico problema che si avrà con il passaggio 4 è assicurarsi che i browser abbiano l'impostazione abilitata per aprire il pop-up in una nuova finestra e che sia possibile ridimensionarlo. – epascarello

risposta

17

Il post è piuttosto vecchio, ma qui è un'implementazione concreta per i lettori futuri:

var resizeViewPort = function(width, height) { 
    if (window.outerWidth) { 
     window.resizeTo(
      width + (window.outerWidth - window.innerWidth), 
      height + (window.outerHeight - window.innerHeight) 
     ); 
    } else { 
     window.resizeTo(500, 500); 
     window.resizeTo(
      width + (500 - document.body.offsetWidth), 
      height + (500 - document.body.offsetHeight) 
     ); 
    } 
}; 

E se si vuole prendere le barre di scorrimento in considerazione:

var resizeViewPort = function(width, height) { 
    var tmp = document.documentElement.style.overflow; 
    document.documentElement.style.overflow = "scroll"; 

    if (window.outerWidth) { 
     window.resizeTo(
      width + (window.outerWidth - document.documentElement.clientWidth), 
      height + (window.outerHeight - document.documentElement.clientHeight) 
     ); 
    } else { 
     window.resizeTo(500, 500); 
     window.resizeTo(
      width + (500 - document.documentElement.clientWidth), 
      height + (500 - document.documentElement.clientHeight) 
     ); 
    } 

    document.documentElement.style.overflow = tmp; 
}; 

Buon divertimento ...

+2

Confermato che funziona con IE 11, FF e Chrome (tutti su Windows) – mlhDev

+2

Soluzione eccellente, tuttavia l'ho usata nell'evento window.resize. Il primo non funziona bene in questo caso in almeno due versioni desktop di Safari: la finestra continua a ridimensionare e ridimensionare, diverse volte, fino a quando non raggiunge la dimensione giusta, o rimane bloccata in un ciclo di ridimensionamento. Che cosa ha risolto per me, sta calcolando 'window.outerWidth - window.innerWidth' una volta, quando il DOM è stato caricato, e usa quei valori ogni volta, invece di calcolarli su ogni ridimensionamento. Ho fatto la stessa cosa per l'altezza. – toon81