Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅在Opera中出现JS错误-无法将x转换为对象_Javascript_Runtime Error_Opera - Fatal编程技术网

Javascript 仅在Opera中出现JS错误-无法将x转换为对象

Javascript 仅在Opera中出现JS错误-无法将x转换为对象,javascript,runtime-error,opera,Javascript,Runtime Error,Opera,此错误仅在Opera浏览器中发生。我看到过一些帖子有类似的错误,但我认为建议的解决方案不适用于我的示例。大多数解决方案都说x是未定义的。我认为这不适用,因为我推迟了我的脚本 我的html文件: <head> ... <script src="media.match.min.js"></script> <script defer src="bgimg.js"></script> <link rel="

此错误仅在Opera浏览器中发生。我看到过一些帖子有类似的错误,但我认为建议的解决方案不适用于我的示例。大多数解决方案都说x是未定义的。我认为这不适用,因为我推迟了我的脚本

我的html文件:

<head>
    ...
    <script src="media.match.min.js"></script>
    <script defer src="bgimg.js"></script>
    <link rel="stylesheet" type="text/css" href="styles.css"/>
</head>
<body>
    <div id="container"></div>
</body>
这在所有现代浏览器中都适用,但在Opera中会出现以下错误:

未处理的错误:无法将“容器”转换为对象

第27行:

container.style.backgroundImage=文件名


也许Opera在我如何创建文件名的问题上有个漏洞?还是我的剧本出了什么问题?同样,在任何其他浏览器中都不会抛出错误。

根据这两种情况,pre Blink Opera不支持“延迟”属性。但是,可用。

不,与文件名无关,错误表明容器不是对象。也许opera将其转换为字符串。不同的浏览器表现不同,这就是为什么建议使用jQuery进行DOM操作的原因-它提供了跨浏览器的兼容性这个问题可能会从中受益。如果@Bergi的回答帮助你解决了你的问题,请不要忘记接受它。我只是在想这是否就是问题所在!谢谢,我会试试的。如果不行,你需要使用《谢谢》中介绍的任何技巧。因为我在这里关注的是速度,所以我使用了肮脏的方法将我的bgimg.js脚本移动到页面的末尾,现在可以正常加载了。
var container = document.getElementById("container");

// declare all media queries
var mqXS = window.matchMedia("...");
var mqS = window.matchMedia("...");
var mqM = window.matchMedia("...");
var mqL = window.matchMedia("...");
var mqXL = window.matchMedia("...");
var mqXXL = window.matchMedia("...");
var mqXXXL = window.matchMedia("...");

// create matching arrays to iterate
var queryLists = [mqXS, mqS, mqM, mqL, mqXL, mqXXL, mqXXXL];
var fileNames = ["_xs", "_s", "_m", "_l", "_xl", "_xxl", "_xxxl"];

// function to check media queries and load matching image
var checkQueries = function() {
    for (var i = 0; i < queryLists.length; i++) {
        if (queryLists[i].matches) {
            var fileName = "url(images/ls/01" + fileNames[i] + ".jpg)";

            container.style.backgroundImage = fileName;
            break;
        } else {
            console.log("no match");
        }
    }
};

// run once
checkQueries();