Jak działa opcja „Poproś o witrynę na komputer” w przeglądarce Chrome?

94

W Google Chrome na iOS, gdy użytkownik kliknie przycisk „Zażądaj witryny na komputer”, co robi przeglądarka, aby wyświetlić witrynę na komputer? Wyobrażam sobie jakiś nagłówek w żądaniu, którego szukają strony, lub coś podobnego?

butallmj
źródło

Odpowiedzi:

64

Myślę, że jedyną różnicą jest User-Agent:nagłówek w żądaniu.

Oto nagłówki User-Agent wysłane przez Chrome na moim urządzeniu z Androidem:

Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.45 Safari/535.19

Zwróć uwagę na słowo „telefon komórkowy” w pierwszym, a także wzmiankę o systemie i urządzeniu z Androidem. Sprawdzając je, widzę, że zawiera również fałszywe informacje - a mianowicie X11 i x86_64 - aby ściśle odpowiadać wartości wysyłanej przez wersję na komputer z systemem Linux Chrom.

dsh
źródło
14
Osobny nagłówek byłby genialny. Wąchanie agenta użytkownika jest straszne.
Mu Mind
10
Zgadzam się. Czasami automatyczne wykrywanie i przekierowywanie zaimplementowane w niektórych witrynach przynosi ogromne skutki odwrotne do zamierzonych i irytuje.
dsh
5
Lepszym rozwiązaniem byłoby wykrycie rozmiaru urządzenia, interfejsów i możliwości. Zapytania o media CSS to krok we właściwym kierunku.
Brad
1
Ta funkcja nie jest realizowana przez proste przełączanie i odświeżanie UA. Prawda jest taka, że ​​większość witryn mobilnych NIE przełączy się z powrotem na komputer po załadowaniu ciągiem znaków UA dla komputerów stacjonarnych. Czyli Safari używa Twojego pierwotnego żądania? Nie. Wygląda na to, że działa, nawet jeśli pierwotnie wpisałeś adres URL witryny mobilnej. Nie wiem, jak jest zaimplementowany, ponieważ nazwa wersji mobilnych nie jest w żadnym wypadku znormalizowana, ale dzieje się coś mądrzejszego niż zwykła zmiana UA.
Andrew G
Chciałbym zwrócić uwagę, że „rzutnia układu” również ulegnie zmianie, jeśli uruchomi się opcję „Żądaj witryny na komputery stacjonarne”, która wpływa na zapytanie o media. Sprawdź w-mobile-web-podręcznika więcej infomation o rzutni.
Rick
19

Chciałem tylko zwrócić uwagę, że Chrome teraz nie tylko zmienia, User-Agentale także ignoruje oryginalny metatag viewport, jeśli „Żądasz witryny na komputer”. Dzięki temu nie będzie już konieczne wąchanie ich User-Agenti możesz polegać na zmianie widocznego obszaru, ponieważ większość responsywnych witryn zrobi to automatycznie. Zobacz tę zmianę w celu uzyskania dalszych informacji.

Tomasz
źródło
1
Dziękuję za to. moja bardzo prosta witryna zachowuje się zupełnie inaczej, gdy nie jest klikana, i nie mogłem zrozumieć, dlaczego robię tylko zapytania o media w CSS.
Reveley,
17

Jeszcze jedna niewielka różnica polega na tym, że żądanie wydaje się dotyczyć ostatniego celowo wprowadzonego adresu URL przed przeniesieniem go przez jakąkolwiek dyrekcję. Na przykład:

Biorąc pod uwagę: somesite.com węszy agenta, widzi Androida i wykonuje dokument.location + = "/ m";

Następnie: przeglądarka będzie miała adres URL witryny somesite.com/m

Ale: jeśli „Zażądaj witryny na komputery”, zmieni to agenta użytkownika i ponownie zażąda od somesite.com

Chyba że: najpierw trafiłeś bezpośrednio na mobilny adres URL somesite.com/m, w takim przypadku po prostu ponownie ładuje somesite.com/m.

Spodziewałbym się, że działa to z przekierowaniami HTTP 301 i 302, wiem, że działa ze zmianami document.location (przynajmniej tak jak opisano) i spekulowałbym, że działa z odświeżeniami <meta>.

Jason Miller
źródło
Czy oparłeś swoją odpowiedź na tym ?
Keale
@Keale prawdopodobnie na odwrót, biorąc pod uwagę sygnatury czasowe
verbumSapienti
Wygląda na to, że jeśli żądanie POST otrzyma 302 lub 303 sugerujące GET dla innego adresu URL, to użytkownik zmieni ustawienie „widok pulpitu”, przeglądarka prześle żądanie GET do pierwotnego adresu URL, który zwrócił 302/303 (tracąc parametry POST ). Wygląda na to, że robią to zarówno Firefox, jak i Chrome, a IMO zdecydowanie nie powinno się to dziać.
Jake
-2

Ten fragment kodu javascript skutecznie zrobi to samo:

function requestDesktopSite() {
    document.getElementsByTagName('meta')['viewport'].content='min-width: 980px;';
}
<button onclick="requestDesktopSite()">Request Desktop Site</button>

10us
źródło