您的位置:首页 > 运维架构 > 网站架构

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

2012-02-14 18:09 495 查看
在优酷网站中如果对应某个属性不支持就会报出错误说不支持

在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的方式也又对应的类型检查
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: