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

时间:2014-12-16 17:21:57

标签: javascript runtime-error opera

此错误在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的错误?或者我的脚本出了别的问题?同样,任何其他浏览器都不会抛出任何错误。

1 个答案:

答案 0 :(得分:0)

根据caniuseMDNthis SO answer,(pre-Blink)Opera不支持defer属性。但是,there seems to be a polyfill可用。