普通网站检测浏览器是否支持格式在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的方式也又对应的类型检查
在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的方式也又对应的类型检查
相关文章推荐
- 如何检测浏览器是否支持HTML5
- 检测您的浏览器是否支持 HTML5 视频方法
- HTML5视频支持检测(检查浏览器是否支持视频播放)
- 检测用户是否打开浏览器控制台的方式
- 怎么用PHP实现检测网站文章是否被收录
- 检测浏览器是否支持DOM2级规定的HTML事件
- 检测网站是否支持gzip的本地代码
- Video---如何检测您的浏览器是否支持HTML5视频
- 移动Web开发,4行代码检测浏览器是否支持position:fixed
- 使用js检测浏览器是否支持html5中的video标签的方法
- 如何检测您的浏览器是否支持HTML5视频
- 关于检测浏览器是否支持flash的js代码
- 检测浏览器是否支持HTML5/CSS3神器Modernizr
- 【Android】检测是否处于Wifi环境,利用WebView实现浏览器app
- 用javascript来判断浏览器是否禁止了弹出窗口,并在网页中以友好的方式来提示网站浏览者
- 特殊需求:EF 6.x如何比较TimeSpan格式的字符串?EF Core实现方式是否和EF 6.x等同?
- 检测浏览器是否支持webp格式
- javascript检测各种浏览器型号和版本、检测是否支持flash并显示版本
- 使用js检测用户是否在用微信浏览器浏览网站
- js检测浏览器是否支持css的属性