Javascript 仅在Opera中出现JS错误-无法将x转换为对象
此错误仅在Opera浏览器中发生。我看到过一些帖子有类似的错误,但我认为建议的解决方案不适用于我的示例。大多数解决方案都说x是未定义的。我认为这不适用,因为我推迟了我的脚本 我的html文件: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="
<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();