2011-03-17 18 views
6

Korzystam z następującego kodu, aby otworzyć wyskakujące okno w rozszerzeniu Google Chrome, moje jedno pytanie brzmi: w jaki sposób można otworzyć wyskakujące okno w środku ekran użytkownika?Okno wyskakujące, środkowy ekran

<script> 
    chrome.browserAction.onClicked.addListener(function() { 
    var left = (screen.width/2)-(w/2); 
    var top = (screen.height/2)-(h/2); 
    chrome.windows.create({'url': 'redirect.html', 'type': 'popup', 'width': 440, 'height': 220, 'left': '+left+', 'top': '+top+', } , function(window) { 
    }); 
}); 
    </script> 

Próbowałem również tego, co nie przyniosło takiego szczęścia.

<script> 
    chrome.browserAction.onClicked.addListener(function() { 
    chrome.windows.create({'url': 'redirect.html', 'type': 'popup', 'width': 440, 'height': 220, 'left': (screen.width/2)-(w/2), 'top': (screen.height/2)-(h/2), } , function(window) { 
    }); 
}); 
    </script> 
+0

Jedna kwestia, którą widzę: czym są w i h? Nie są zdefiniowane w jednym z krótkich fragmentów: –

+0

@Matt S Myślałem, że zostały zdefiniowane przez: ** 'width': 440, 'height': 220, ** – itsdaniel0

Odpowiedz

13

Po zobaczeniu struktury var obj = {property: value} w JS jest to tworzenie obiektu. W twoim kodzie próbujesz przekazać obiekt zawierający właściwości okna do funkcji chrome.windows.create().

Prawidłowy kod powinien być:

chrome.browserAction.onClicked.addListener(function() { 
    var w = 440; 
    var h = 220; 
    var left = (screen.width/2)-(w/2); 
    var top = (screen.height/2)-(h/2); 

    chrome.windows.create({'url': 'redirect.html', 'type': 'popup', 'width': w, 'height': h, 'left': left, 'top': top} , function(window) { 
    }); 
}); 
+0

Szczerze, nie mogę ci wystarczająco podziękować! Dziękuję – itsdaniel0

+0

@ itsdaniel0 Serdecznie zapraszamy :) – serg

+1

chrome.windows.create oczekuj, że 'top' i 'left' będą liczbami całkowitymi, więc upewnij się, że Math.round() przed przekazaniem parametrów. – holmberd

1

Jako dodatek do tej odpowiedzi, jeśli chcesz, aby pobrać wymiary popup z localStorage - które są zapisane jako ciągi - to będzie konwertować zmienne do niezbędnych liczb całkowitych aby pop-up działał.

var w = parseInt(localStorage.getItem('key')); 
var h = parseInt(localStorage.getItem('key')); 
1

Jeśli chcesz centrowanie również pracować z dwóch monitorów, musisz dostać bieżącego okna obiektu z rozszerzeniem i centrum wyskakujących stosunku do tego. Tak:

chrome.browserAction.onClicked.addListener(function() { 
    chrome.windows.getCurrent(function(win) { 
     var width = 440; 
     var height = 220; 
     var left = ((screen.width/2) - (width/2)) + win.left; 
     var top = ((screen.height/2) - (height/2)) + win.top; 

     chrome.windows.create({ 
      url: 'redirect.html', 
      width: width, 
      height: height, 
      top: Math.round(top), 
      left: Math.round(left), 
      type: 'popup' 
     }); 
    }); 
    }); 

chrome.windows.create oczekuje liczbę całkowitą dla top i left, więc zaleca się owinąć te wartości w Math.round.

Powiązane problemy