我使用picturefill作为响应式图像解决方法,并且懒惰加载图像并且它工作得非常好。现在Internet Explorer(11)的控制台中存在一些错误:
Unable to get property 'push' of undefined or null reference
似乎候选人是空的或未定义的,但我无法将其固定下来,因为它可以在其他地方工作,并且在IE中的图像或HTML中也没有明显的错误。如果使用了lazysizes,则只会出现错误,而只有这种情况并非如此。
以下是我如何使用带有lazysizes的图片元素的示例:
<picture>
<!--[if IE 9]><video style="display: none;"><![endif]-->
<!-- Desktop -->
<source data-srcset="image-desktop.jpg 1x, image-desktop-2x.jpg 2x" media="(min-width: 1024px)" class="lazyload lazypreload">
<!-- Tablet -->
<source data-srcset="image-tablet.jpg 1x, image-tablet-2x.jpg 2x" media="(min-width: 704px)" class="lazyload lazypreload">
<!-- Mobile Big -->
<source data-srcset="image-mobile-big.jpg 1x, image-mobile-big-2x 2x" media="(min-width: 384px)" class="lazyload lazypreload">
<!--[if IE 9] ></video><![endif]-->
<!-- Default Mobile -->
<img class="picturefill__image class="lazyload lazypreload" data-srcset="image-mobile.jpg 1x, image-mobile-2x.pg 2x" src="loader.gif" />
</picture>
图片填充脚本使用requireJS加载到页脚中,如下所示:
var picturefill = require('picturefill');
lazysizes脚本也会加载到页脚中,就像picturefill with requireJS一样。它是在picturefill之前加载的。
关于这里的问题是什么的任何想法?我错过了什么?
更新:看起来错误发生在这里(picturefill.js):
imageData.sets = [];
if ( hasPicture ) {
imageData.pic = true;
getAllSourceElements( parent, imageData.sets );
}
然后使用第二个变量作为候选者,抛出未定义的错误:
function getAllSourceElements( picture, candidates ) {
...