普通网站检测浏览器是否支持格式在webkit中的实现方式

在优酷网站中如果对应某个属性不支持就会报出错误说不支持

在html5 video的使用过程中也是存在这样的问题

video标签包含一个

canPlayType属性,这个可以判断你浏览器内部是否支持某一属性。

对应到webkit的代码中就是:
String HTMLMediaElement::canPlayType(const String& mimeType) const
{
    MediaPlayer::SupportsType support = MediaPlayer::supportsType(ContentType(mimeType));
    String canPlay;

    // 4.8.10.3
    switch (support)
    {
        case MediaPlayer::IsNotSupported:
            canPlay = "";
            break;
        case MediaPlayer::MayBeSupported:
            canPlay = "maybe";
            break;
        case MediaPlayer::IsSupported:
            canPlay = "probably";
            break;
    }
    
    return canPlay;
}

根据webkit本身的语法规定是存在idl文件与之想对应

DOMString canPlayType(in DOMString type);


以下是具体的调用的backtrace:

#0  WebCore::MediaPlayerPrivate::supportsType (type=@0x4ef7c524, codecs=@0x4ef7c520) at external/webkit/WebKit/android/WebCoreSupport/MediaPlayerPrivateAndroid.cpp:547
#1  0xa83f9a40 in chooseBestEngineForTypeAndCodecs (type=<value optimized out>, codecs=<value optimized out>) at external/webkit/WebCore/platform/graphics/MediaPlayer.cpp:197
#2  0xa83f9cca in WebCore::MediaPlayer::supportsType (contentType={m_type = {m_impl = {<WTF::FastAllocBase> = {<No data fields>}, m_ptr = 0xa517b8}}})
    at external/webkit/WebCore/platform/graphics/MediaPlayer.cpp:565
#3  0xa838c9dc in WebCore::HTMLMediaElement::canPlayType (this=<value optimized out>, mimeType=<value optimized out>) at external/webkit/WebCore/html/HTMLMediaElement.cpp:418
warning: (Internal error: pc 0xa85a660f in read in psymtab, but not in symtab.)
#4  0xa85a6610 in canPlayTypeCallback (args=<value optimized out>)
    at out/debug/target/product/newbox/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/bindings/V8HTMLMediaElement.cpp:317
warning: (Internal error: pc 0xa85a660f in read in psymtab, but not in symtab.)
#5  0xa8610d96 in HandleApiCallHelper<false> (args={<v8::internal::Arguments> = {length_ = 3, arguments_ = 0x4ef7c60c}, <No data fields>}) at external/v8/src/builtins.cc:783
#6  0xa8610df0 in Builtin_HandleApiCall (args={<v8::internal::Arguments> = {length_ = 3, arguments_ = 0x4ef7c60c}, <No data fields>}) at external/v8/src/builtins.cc:800
#7  0x44a72234 in ?? ()

与此类似的flash的npnpi的方式也又对应的类型检查




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值