此错误仅在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>
media.match.min.js
是针对旧浏览器的window.matchMedia()
的填充。
bgimg.js
是我自己的脚本,可根据媒体查询更新背景图片。
我将发布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();
所以这适用于所有现代浏览器,但在Opera中会抛出此错误:
Unhandled Error: Cannot convert 'container' to object
第27行:
container.style.backgroundImage = fileName;
所以也许Opera有一个关于我如何创建fileName
的错误?或者我的脚本出了别的问题?同样,任何其他浏览器都不会抛出任何错误。
答案 0 :(得分:0)
根据caniuse,MDN和this SO answer,(pre-Blink)Opera不支持defer
属性。但是,there seems to be a polyfill可用。