我正在尝试使用link 07的preload rel值预加载视频.
在我的index.html文件中,我将以下内容添加到头部:
<link rel="preload" as="video" type="video/mp4" href="video/2_1.mp4" />
在chrome中,这可以正常工作并预加载文件而不会出现问题.
当我在我的桌面或iPhone上的safari 11.3中打开页面时,我收到一个控制台错误消息:
must have a valid
as
value
根据包含有效值列表的文档的“what types of content can be preloaded”部分,我肯定使用正确的视频类型.
我在链接标签上检查了mdn documentation的移动safari预装选项,它显示了“兼容性未知”问号.我还检查了caniuse,它似乎表明,只要我的手机游戏版本是11.3我应该能够使用它.
手机和我的桌面都在11.3的safari,所以我不知道为什么我会收到这个错误.
任何想法/见解?
最佳答案 似乎webkit禁用了视频和音频文件的预加载.
if (RuntimeEnabledFeatures::sharedFeatures().mediaPreloadingEnabled() && (equalLettersIgnoringASCIICase(as, "video") || equalLettersIgnoringASCIICase(as, "audio")))
return CachedResource::MediaResource;
if (equalLettersIgnoringASCIICase(as, "font"))
return CachedResource::FontResource;
#if ENABLE(VIDEO_TRACK)
if (equalLettersIgnoringASCIICase(as, "track"))
return CachedResource::TextTrackResource;
#endif
return std::nullopt;
https://github.com/WebKit/webkit/blob/master/Source/WebCore/loader/LinkLoader.cpp#L125
auto type = LinkLoader::resourceTypeFromAsAttribute(as);
if (!type) {
document.addConsoleMessage(MessageSource::Other, MessageLevel::Error, String("<link rel=preload> must have a valid `as` value"));
return nullptr;
}
https://github.com/WebKit/webkit/blob/master/Source/WebCore/loader/LinkLoader.cpp#L239-L243
我不确定我们是否可以通过更改某些配置在safari上启用mediaPreloadingEnabled.