скажите html doc не загружать js, если мобильное устройство

Я нахально ищу здесь пару строк кода:

Может ли кто-нибудь быть достаточно любезным, чтобы предоставить код для размещения в разделе заголовка html-документа, в котором говорится, что если мобильный телефон не загружает JS?

Это используется вместе со следующим медиа-запросом CSS:

<link rel="stylesheet" type="text/css" media="only screen and (max-device-width: 480px)" href="m/styles_mobile.css" />

Поэтому я ищу фрагмент кода, основанный на том же правиле: media = "only screen and (max-device-width: 480px)"

Был бы очень признателен


person Doug Fir    schedule 09.05.2012    source источник
comment
вы можете сослаться на это: stackoverflow.com/questions/2053695/   -  person Sal    schedule 09.05.2012
comment
спасибо Я перешел по ссылке. Разочаровывая, что в нем говорится, что скрипт все равно загрузится, я надеялся улучшить / облегчить время загрузки / использование данных на мобильных устройствах, не запуская скрипт на мобильных устройствах. Итак, читая, что там, если бы я написал: ‹SCRIPT language = JavaScript› ‹! - if ((screen.width› = 480), что бы я написал рядом, чтобы сказать, если true, не загружать и не использовать скрипт?   -  person Doug Fir    schedule 09.05.2012
comment
вы можете проверить от screen size до js, а затем загрузить только scripts, которые необходимы _4 _ .. Я напишу вам быстрый вариант!   -  person Sal    schedule 09.05.2012


Ответы (5)


Дано: «если мобильный, то не загружать JS», и предполагая, что «мобильный» определяется экранами с шириной 480 пикселей или меньше, то должно работать что-то вроде следующего:

<script>
if (screen && screen.width > 480) {
  document.write('<script type="text/javascript" src="foo.js"><\/script>');
}
</script>

Это добавит элемент сценария только в том случае, если ширина экрана больше 480 пикселей.

Правило CSS в OP:

<... media="only screen and (max-device-width: 480px)" ...>

который будет нацелен на экраны размером 480 пикселей или меньше, что противоречит первому утверждению. Поэтому измените > на <=, если сценарий должен работать на маленьких экранах, а не на больших.

person RobG    schedule 09.05.2012
comment
Знак перевернут. Это должно быть <. Кроме того, не рекомендуется использовать document.write. - person Derek 朕會功夫; 09.05.2012
comment
OP не хочет, чтобы сценарий запускался, если у устройства маленький экран, знак мне кажется правильным (хотя не то, что использовалось в правиле CSS). - person RobG; 09.05.2012
comment
Я не уверен, но он сказал So I'm looking for a piece of code that is based on the same rule: media="only screen and (max-device-width: 480px)". - person Derek 朕會功夫; 09.05.2012
comment
(window.matchMedia("(min-width: 480px)").matches) следует использовать. - person marcus; 23.12.2016

Я не уверен, как предыдущие ответы будут связаны с дисплеями сетчатки. Я бы сделал что-то вроде:

if( /Android|webOS|iPhone|iPod|iPad|BlackBerry/i.test(navigator.userAgent))
 document.write('<script type="text/javascript" src="foo.js"><\/script>');

фрагмент из здесь

person Dave    schedule 13.07.2012
comment
Думаю, это лучшее решение, потому что мобильных устройств с разрешением Full HD уже существует много. - person ed1nh0; 16.12.2013
comment
Тесты пользовательского агента - худший из возможных способов что-то проверить. Используйте window.devicePixelRatio для проверки дисплеев с высокой плотностью. - person Ry-♦; 21.08.2014
comment
@Ry на самом деле ваш метод не работает во многих случаях, например, в MacBook Retina. (просто хочу обновить знания в этой старой ветке) - person Steven Stark; 27.03.2019
comment
@StevenStark: А? devicePixelRatio должно быть 2 на MacBook с Retina-дисплеем. (Я набираю это с Retina MacBook и только что проверил.) - person Ry-♦; 28.03.2019
comment
@Ry Это довольно старое приложение, но devicePixelRatio не поддерживает ни старые iOS (до Retina), ни Blackberry. Отчасти необычные случаи, но, тем не менее, мой способ лучше, чем ваш. - person Dave; 28.03.2019
comment
@Dave: Вот в чем суть - отличить pre-Retina от Retina и так далее. В любом случае это не имеет значения, потому что другие ответы уже работают на дисплеях Retina. (Они измеряют пиксели CSS, а не физические.) - person Ry-♦; 28.03.2019

Теперь можно использовать window.matchMedia

if (window.matchMedia("(min-width: 480px)").matches) {
  document.write('<script type="text/javascript" src="foo.js"><\/script>');
}

https://developer.mozilla.org/docs/Web/API/Window/matchMedia http://caniuse.com/#feat=matchmedia

person marcus    schedule 23.12.2016

Вы можете сделать это так.

  1. Проверьте ширину и высоту экрана, чтобы убедиться, что это мобильное устройство.
  2. Загружать скрипты с использованием JavaScript.

Что вы можете сделать:

var scripts = ["foo.js",       //Put all your scripts here.
               "bar.js"];

if(screen.width <= 480){
    for(var i=0;i<scripts.length;i++){
              //-with jQuery (one line!)-
        $("head").append('<script type="text/javascript" src="'+scripts[i]+'"><\/script>');
                 //-or jQuery free-
        var scriptEle = document.createElement("script");
        scriptEle.setAttribute("type","text/javascript");
        scriptEle.setAttribute("src",scripts[i]);
        document.getElementsByTagName("head")[0].appendElement(scriptEle);
    }
}

Обратите внимание, это screen.width <= 480.

person Derek 朕會功夫    schedule 09.05.2012
comment
Ширина и высота экрана не говорят вам, что это мобильный телефон, только то, что у него маленький экран. И не должно быть >= 480 или просто > 479 или что-то еще. - person RobG; 09.05.2012
comment
@RobG, и это, вероятно, говорит вам, что это мобильное устройство. - person Derek 朕會功夫; 09.05.2012
comment
IPad мобильный, какого размера у него экран? У меня на столе стоит интернет-телефон, он маленький, но далеко не движется. - person RobG; 09.05.2012
comment
Смотри, media="only screen and (max-device-width: 480px)" - person Derek 朕會功夫; 09.05.2012

Наилучший способ сделать это - добавить его вокруг всего мобильного скрипта в файл "foo.js". У модели DOM возникнут проблемы с загрузкой тега, если вы внезапно добавите его.

if (screen && screen.width > 480) {
 // Whole your script here
}

Вместо того:

if (screen && screen.width > 480) {
  document.write('<script type="text/javascript" src="foo.js"><\/script>');
}
person user3423593    schedule 01.05.2018