有条件地加载 JavaScript 文件

IT技术 javascript html
2021-01-13 01:43:48

我需要一个 JS 语句来确定要使用哪个 JavaScript 文件。

我有一个文件:

<script type="text/javascript" src="js/jquery_computer.js"></script>

但是当屏幕宽度小于 500px 时,我想加载另一个文件:

<script type="text/javascript" src="js/mobile_version.js"></script>

我已经尝试了一切,但它不起作用。

6个回答

您必须自己在 JS 中创建该标记。像这样的东西:

var head = document.getElementsByTagName('head')[0];
var js = document.createElement("script");

js.type = "text/javascript";

if (screen.width > 500)
{
    js.src = "js/jquery_computer.js";
}
else
{
    js.src = "js/mobile_version.js";
}

head.appendChild(js);
我喜欢这种方法。有时脚本将无法加载,因此这种轮询以查看您的脚本是否成功的概念可能很有用stackoverflow.com/questions/1130921/...
2021-03-14 01:43:48
请注意,在具有缩小浏览器窗口的桌面上使用 screen.width 时,它仍然会为您提供设备宽度,而不是实际可用空间。根据场景,您可以使用内置的 window.matchMedia(参见我的回答)或保留 screen.width
2021-03-16 01:43:48
2021-04-04 01:43:48

如果您希望异步加载脚本,这里的其他答案就是这样做的。

如果您希望它与页面加载同步加载,这是非常非常少的剩余有效用例之一document.write

<script>
(function() { // Scoping function to avoid globals
    var src = /*you want the main version*/ ? "jquery_computer.js" : "mobile_version.js";
    document.write('<script src="js/' + src + '"><\/script>');
})();
</script>

(我已经删除了,type因为 JavaScript 是默认的,指定它没有用。)

非常适合if (typeof Promise === 'function') {/*load a script */}解决 microsoft 的“兼容性解决方案”所需用例。
2021-03-16 01:43:48

也许你可以使用matchMedia.js并且可以加载使用脚本jQuery.getScript

$(function(){
    if (matchMedia('only screen and (max-width: 500px)').matches) {
        $.getScript(...);
    }
});
我更喜欢不依赖于 jQuery 的解决方案。我目前正在使用 YepNope ( yepnopejs.com ),但考虑到该库已被作者弃用,我想用另一个解决方案替换它。
2021-03-22 01:43:48

最好是使用内置的 matchMedia API。

var script = document.createElement('script');
script.type='text/javascript';

if(window.matchMedia("(min-width:500px)").matches) {
  script.src = 'js/jquery.slitslider.js';      
}else{
  script.src = 'js/mobile_version.js';      
}

document.getElementsByTagName('head')[0].appendChild(script);

缺点是 IE < 10 不支持

为此,您不需要 jQuery,<script>在 DOM 中动态创建标签就足够了

var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');

script.type = 'text/javascript';

if (<screen-width less than 500>)
    script.src = "js/mobile_version.js";
else
    script.src = "js/jquery_computer.js";

head.appendChild(script);