vodplayer.js 83 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104
  1. /*
  2. *
  3. */
  4. var vodPlayerVer = "2021.12.23.01";
  5. var vodConvivaClient = null;
  6. var vodConvivaPlayerStateManager = null;
  7. var isUseConvivaMonitor = false;
  8. var isConvivaApiLoaded = false;
  9. var systemFactory = null;
  10. var isUseAliMonitor = true;
  11. var isAliApiLoaded = false;
  12. var isVodControlsLoaded = false;
  13. var vodUrlProtocol = "https://";
  14. var vodPlayerObjs = {};
  15. var isFlashPlayer = true;
  16. vodPlayerObjs.isLoadedOldH5Player = false;
  17. vodPlayerObjs.fingerprintJsIsStarted = false;
  18. var html5PlayBtnBottomleft = {};
  19. var playerWidthAndHeight = {};
  20. var flashPlayerList = [];
  21. var isVodMobileUseBrowerUi = false;
  22. var currentMessage = "";
  23. var sns_islogin = "";
  24. var CNTVH5PlayerModule,liveAudio,moduleInitialized=false;
  25. function createVodPlayer(paras) {
  26. var container = document.getElementById(paras.divId);
  27. if(location.href.indexOf("https://")!==-1) {
  28. paras.isHttps = "true";
  29. vodPlayerObjs.isHttps = "true";
  30. }
  31. if(paras.isHttps !== "true") {
  32. vodUrlProtocol = "http://";
  33. }
  34. //移动端是否用浏览器自带UI
  35. if(isIPad()) {
  36. isVodMobileUseBrowerUi = true;
  37. }
  38. vodPlayerObjs[paras.divId] = paras;
  39. //20200828
  40. if(typeof paras.w==="string" && paras.w.indexOf("%")>0) {
  41. //container.style.width = paras.w;
  42. } else{
  43. container.style.width = paras.w + "px";
  44. }
  45. //20200828
  46. if(typeof paras.h==="string" && paras.h.indexOf("%")>0) {
  47. //container.style.height = paras.h;
  48. } else{
  49. container.style.height = paras.h + "px";
  50. }
  51. //container.style.width = paras.w + "px";
  52. //container.style.height = paras.h + "px";
  53. if(!isVodDrmLegalDomainUrl(paras)) {
  54. showVodPlayerMsg(paras, "å¯¹ä¸èµ·ï¼Œç”±äºŽç‰ˆæƒåŽŸå› ï¼Œè§†é¢‘æ— æ³•æ’­æ”¾");
  55. return;
  56. }
  57. if(paras.isLeftBottom === "true") {
  58. paras.isLeftBottom = true;
  59. } else{
  60. paras.isLeftBottom = false;
  61. }
  62. if(paras.isAudio === "true") {
  63. paras.isAudio = true;
  64. } else{
  65. paras.isAudio = false;
  66. }
  67. if(isIPad() && paras.isAudio) {
  68. paras.h = 40;
  69. }
  70. if(paras.isLeftBottom) {
  71. html5PlayBtnBottomleft[paras.divId] = true;
  72. }
  73. playerWidthAndHeight[paras.divId] = {};
  74. playerWidthAndHeight[paras.divId].w = paras.w;
  75. playerWidthAndHeight[paras.divId].h = paras.h;
  76. flashPlayerList.push("flashplayer_" + paras.divId);
  77. var Fingerprint = "";
  78. if(!getCookie_vdn("Fingerprint") && !vodPlayerObjs.fingerprintJsIsStarted){
  79. getVodfingerprint2();
  80. } else{
  81. Fingerprint = getCookie_vdn("Fingerprint");
  82. }
  83. vodPlayerObjs.fingerprintJsIsStarted = true;
  84. if((paras.playerType==="vod_h5"||paras.playerType==="pandavod_h5") && !isIPad() && !paras.isAudio &&((navigator.userAgent.indexOf("rv:11") === -1) && navigator.userAgent.indexOf("MSIE") === -1)) {
  85. /**
  86. * =================================== #MARK PC-H5 逻辑开始 ===================================
  87. * line 110 ~ line 381, 251
  88. *
  89. * 2020.6.9 wh
  90. * 1、H5点播逻辑初始化,此逻辑初次由wh编写,其他逻辑由wnh维护
  91. * 2、H5点播进入环境:支持MSIE的chrome || 支持MSIE的firefox || safari通过原生方案支持 || 覆盖原生方案支持 Edge || IE11以上 + win8.1以上; 不支持winxp win7 + IE11以下的版本
  92. * 3、此处逻辑只做参数转义,不涉及其他逻辑
  93. * 4ã€ç”±äºŽå…¼å®¹è€ç‰ˆæœ¬çš„åŽŸå› ï¼ŒåŽŸè¯¥æ–‡ä»¶çš„å‚æ•°ä¸åŠ¨ï¼ŒH5æ–°å‚æ•°å¯åœ¨æ–°å¢žåŠ ï¼›åŽŸå‚æ•°æœ‰æ•ˆçš„H5仍然兼容
  94. * 5、新增H5点播专用参数,支持各种新特性和比flash大得多的开放性,可由页面配置播放器和自定义功能,详情请移步H5集成文档
  95. * 6、如果在H5专用参数中设置的参数与原旧参数冲突,那么H5播放器会使用此处的参数值
  96. * 7、原参数不规范处也在此处处理
  97. *
  98. * 2020.7.17 wh
  99. * 播放器全面重构完毕,调用方式不变。
  100. *
  101. * 2020.8.3 wh
  102. * 按照广告要求全部更新全部四个广告参数 ad_Call_h5、ad_After_h5、ad_Pause_h5、ad_Banner_h5
  103. *
  104. * 2020.8.27 wh
  105. * å¢žåŠ é¿å…å¤šæ¬¡æ’­æ”¾å™¨åŠ è½½é€»è¾‘
  106. *
  107. * 2020.8.31 wh
  108. * å¢žåŠ DRM开关
  109. *
  110. * 2020.9.15 wh
  111. * å¢žåŠ å¼¹å¹•å‚æ•°ã€‚
  112. * å¦‚æžœé¡µé¢å¯ä»¥ä¿®æ”¹ä¸è§„èŒƒçš„å‚æ•°ä¼ é€’ï¼Œå°±ä¸å†éœ€è¦æ¯æ¬¡å¢žå‡å‚æ•°éƒ½ä¿®æ”¹å¼•å­æ–‡ä»¶ã€‚
  113. *
  114. * 2020.10.14 wh
  115. * 开放DRM参数开关给页面
  116. *
  117. * 2020.12.14 wh
  118. * å¢žåŠ ç†ŠçŒ«é…ç½®ï¼Œ#TODO应该在业务端配置
  119. *
  120. * 2021.1.5 wh
  121. * å¢žåŠ 4K频道参数
  122. *
  123. * 2021.3.1 wh
  124. * å¢žåŠ vdn自定义参数
  125. */
  126. // 测试环境 æ”¹å˜åŠ è½½åŸŸåï¼Œæ”¹å˜å¹¿å‘Šå‚æ•°ä¼ å…¥æ–¹å¼
  127. var TEST = false;
  128. vodPlayerObjs._isH5 = true;
  129. paras._isH5 = true;
  130. var coreScrpit = document.getElementById("vodh5playerjsloaded");
  131. if(coreScrpit !== null){
  132. createH5player();
  133. }else{
  134. if(document.getElementById("vodh5playerjs") === null){
  135. // var VOD_H5_JS_URL = !TEST ? "player.cntv.cn/h5vod/vodh5player.min.js" : "localhost/h5vod/vodh5player.js";
  136. var VOD_H5_JS_URL = TEST ? "jstest.v.cntv.cn/h5vod/vodh5player.min.js" : "player.cntv.cn/h5vod/vodh5player.min.js";
  137. var _doc = document.getElementsByTagName("head")[0];
  138. var jsLoader = createElementByType("script","vodh5playerjs","absolute","0px","0px","0px","0px");
  139. if(vodPlayerObjs.isHttps === "true") {
  140. jsLoader.src = "https://" + VOD_H5_JS_URL;
  141. }else{
  142. jsLoader.src = "http://" + VOD_H5_JS_URL;
  143. }
  144. _doc.appendChild(jsLoader);
  145. if(jsLoader.readyState){
  146. jsLoader.onreadystatechange = function(){
  147. if( jsLoader.readyState == 'loaded' || jsLoader.readyState == 'complete' ){
  148. jsLoader.onreadystatechange = null;
  149. jsLoader.id = 'vodh5playerjsloaded';
  150. createH5player();
  151. }
  152. };
  153. }else{
  154. jsLoader.onload = function(){
  155. jsLoader.id = 'vodh5playerjsloaded';
  156. createH5player();
  157. };
  158. }
  159. }else{
  160. var jsLoader = document.getElementById("vodh5playerjs");
  161. //IE
  162. if(jsLoader.readyState){
  163. addEventReady(jsLoader, function(){
  164. jsLoader.id = 'vodh5playerjsloaded';
  165. createH5player();
  166. });
  167. }
  168. //其他浏览器
  169. else{
  170. addEventLoad(jsLoader,function (){
  171. jsLoader.id = 'vodh5playerjsloaded';
  172. createH5player();
  173. });
  174. }
  175. }
  176. }
  177. function addEventLoad(dom,func){
  178. var oldOnload = dom.onload;
  179. if(typeof dom.onload !== 'function'){
  180. dom.onload = func;
  181. }else{
  182. dom.onload = function(){
  183. oldOnload();
  184. func();
  185. }
  186. }
  187. }
  188. function addEventReady(dom,func){
  189. var oldonreadystatechange = dom.onreadystatechange;
  190. if(typeof dom.onreadystatechange !== 'function'){
  191. dom.onreadystatechange = func;
  192. }else{
  193. dom.onreadystatechange = function(){
  194. if( jsLoader.readyState == 'loaded' || jsLoader.readyState == 'complete' ){
  195. jsLoader.onreadystatechange = null;
  196. oldonreadystatechange();
  197. func();
  198. }
  199. }
  200. }
  201. }
  202. function createH5player(){
  203. // 获取H5点播命名空间,H5ç‚¹æ’­åªå¼€æ”¾å°‘æ•°å‡ ä¸ªå…¨å±€æŽ¥å£ï¼Œéƒ½é€šè¿‡å‘½åç©ºé—´è°ƒç”¨é‡åé—®é¢˜ã€‚
  204. var vodplayer_namespace = vodh5player.namespace;
  205. // 是否开启DRM
  206. if(paras.drm === "true"){
  207. vodh5player.DRM = true;
  208. }else{
  209. vodh5player.DRM = false;
  210. }
  211. //TMP
  212. //vodh5player.DRM = true;
  213. // 播放器保存变量 #DELETE 不再在此引用文件中管理播放器列表,勿引用未来版本会移除
  214. var h5player_1;
  215. // 参数对象,详情参数集成文档 https://jstest.v.cntv.cn/h5vod/integration.pdf
  216. var playerParas = {
  217. // 播放器容器id,必填项
  218. divId: paras.divId,
  219. videoId: paras.videoCenterId,
  220. taiName: paras.t,
  221. videoAlbum: paras.videoId,
  222. isLogin: paras.isLogin,
  223. userId: paras.userId,
  224. posterImg: paras.posterImg,
  225. // H5新增
  226. //éœ€è¦å¢žåŠ æ— æ•ˆå€¼å±è”½ï¼Œæ— æ•ˆå³ä¸­æ–‡
  227. // language: paras.language,
  228. autoplay: "true",
  229. ui_nextTitle: paras.nextTitle,
  230. ui_nextImageUrl: paras.nextThumbnail,
  231. startTime: paras.start,
  232. // 弹幕相关,弹幕场景:live代表单场直播和多视角,video代表点播; itemID
  233. barrageApp: paras.barrageApp,
  234. barrageType: paras.barrageType,
  235. barrageItemId:paras.barrageitemID,
  236. hasBarrage: paras.hasBarrage,
  237. // 由使用场景控制vdn新增定制参数
  238. vdn:paras.vdn,
  239. // 由使用场景控制cms新增定制参数
  240. cms:paras.cms
  241. };
  242. if(typeof(ad_Call_h5)!="undefined") {
  243. playerParas.preAdUrl = decodeURIComponent(ad_Call_h5);
  244. }
  245. if(typeof(ad_After_h5)!="undefined") {
  246. playerParas.postAdUrl = decodeURIComponent(ad_After_h5);
  247. }
  248. if(typeof(ad_Pause_h5)!="undefined") {
  249. playerParas.pauseAdUrl = decodeURIComponent(ad_Pause_h5);
  250. }
  251. if(typeof(ad_Banner_h5)!="undefined") {
  252. playerParas.bannerAdUrl = decodeURIComponent(ad_Banner_h5);
  253. }
  254. // 模式广告测试
  255. if(playerParas.simulateAd === true){
  256. playerParas['preAdUrl'] = paras.ad_Call_h5;
  257. playerParas['postAdUrl'] = paras.ad_After_h5;
  258. playerParas['pauseAdUrl'] = paras.ad_Pause_h5;
  259. playerParas['bannerAdUrl'] = paras.ad_Banner_h5;
  260. }
  261. // 统一布尔值转义
  262. var need2transfer =
  263. [
  264. "isDefaultPreImage",
  265. "isHttps",
  266. "setupOn",
  267. "speedOn",
  268. "hasBarrage",
  269. "webFullScreenOn",
  270. "listMode",
  271. "isAutoPlay"
  272. ];
  273. var h5paras =
  274. [
  275. "posterFromVDN",
  276. "isHttps",
  277. "ui_setup",
  278. "ui_rate",
  279. "hasBarrage",
  280. "ui_webFullScreen",
  281. "listMode",
  282. "autoplay"
  283. ];
  284. for(var ti in need2transfer){
  285. if(paras[need2transfer[ti]] === "true"){
  286. playerParas[h5paras[ti]] = true;
  287. }else if(paras[need2transfer[ti]] === "false"){
  288. playerParas[h5paras[ti]] = false;
  289. }else{
  290. playerParas[h5paras[ti]] = paras[need2transfer[ti]];
  291. }
  292. }
  293. // fix problem safari autoplay behavior is diffrent
  294. var isSafari = navigator.userAgent.indexOf("Safari") > -1 && navigator.userAgent.indexOf("Chrome") == -1;
  295. if(isSafari && playerParas.autoplay === true || playerParas.autoplay === 'true'){
  296. playerParas.autoplay = 'false';
  297. // console.log('isSafari autoplay:' + playerParas.autoplay);
  298. }
  299. // # TODO,为了兼容页面 å¢žåŠ é¢å¤–æ ·å¼, åŽŸåˆ™ä¸Šä¸åº”è¯¥åœ¨æ­¤å¤„åŠ æ ·å¼ï¼
  300. var playerContainer1 = document.getElementById(paras.divId);
  301. playerContainer1.style.width = paras.w + "px";
  302. playerContainer1.style.height = paras.h + "px";
  303. playerContainer1.style.position = "relative";
  304. // 兼容cmsè€å‚æ•°ä¸åˆç†é—®é¢˜ï¼Œå¢žåŠ æ— æ•ˆå€¼å±è”½ï¼Œæ— æ•ˆå³ä¸­æ–‡ã€‚ H5å†…éƒ¨åšäº†å¤§å°å†™æ ‡è¯†çš„å…¼å®¹
  305. if(paras.language === undefined || paras.language === "" || paras.language === " "){
  306. playerParas.language = 'zh-CN';
  307. }else {
  308. playerParas.language = paras.language;
  309. }
  310. // 处理熊猫逻辑参数 #TODO由业务端处理更合理
  311. if(paras.playerType === 'pandavod_h5'){
  312. if(paras.h5 === undefined){
  313. paras.h5 = {};
  314. }
  315. paras.h5.style = 'ipanda';
  316. paras.h5.chooseVideo = true;
  317. paras.h5.ui_pictureInPicture = false;
  318. vodh5player.BARRAGE_CONFIG_URL = 'www.ipanda.com/xm/include/emotionnew/index.json';
  319. }
  320. // 处理4K频道参数 #TODO由业务端处理更合理
  321. if(paras.isVod4k === "true"){
  322. if(paras.h5 === undefined){
  323. paras.h5 = {};
  324. }
  325. // ['normal','4k'];
  326. paras.h5.PLAYER_TYPE_INDEX = 1;
  327. }
  328. // 处理h5直达参数
  329. if(paras.h5 !== undefined){
  330. for(var pi in paras.h5){
  331. playerParas[pi] = paras.h5[pi];
  332. }
  333. // 是否开启调试模式
  334. vodplayer_namespace.debug(paras.h5.debug);
  335. }
  336. // DEBUG
  337. if(TEST){
  338. vodplayer_namespace.debug(true);
  339. }
  340. // åº”é¡µé¢è¦æ±‚ï¼Œå¢žåŠ é»˜è®¤å…³é—­å€é€Ÿå…¼å®¹
  341. if(playerParas.ui_rate === undefined){
  342. playerParas.ui_rate = false;
  343. }
  344. // ä¸‹é¢ç›‘å¬å¯ä½¿æ’­æ”¾å™¨è°ƒç”¨æŽ¥å£æ›´åŠ å¯é ï¼Œå¦‚æžœé¡µé¢æ— äº¤äº’ä¹Ÿå¯ä¸è°ƒç”¨
  345. // 对播放器容器监听 “vodplayerready" 事件
  346. playerContainer1.addEventListener('vodplayerready', playerReadyHandler);
  347. // 监听到播放器创建完成
  348. function playerReadyHandler(event) {
  349. event.target.removeEventListener('vodplayerready', playerReadyHandler);
  350. // 此方式获取的对象可以确保不是空对象
  351. h5player_1 = vodplayer_namespace.getVodPlayer();
  352. // console.log('h5 player has created' + h5player_1);
  353. }
  354. // 创建播放器
  355. vodplayer_namespace.createVodPlayer(playerParas);
  356. }
  357. /**
  358. * =================================== #MARK PC-H5 逻辑结束 ===================================
  359. */
  360. } else if(isHlsVodPlayer(paras)) {
  361. // if(/(baiduboxapp)/i.test(navigator.userAgent) && !(/(lite baiduboxapp)/i.test(navigator.userAgent)) && !(/(iphone|ipad)/i.test(navigator.userAgent))) {
  362. // if(!(/(cntv.cn|cctv.com)/i.test(location.href))) {
  363. // showVodPlayerMsg(paras, "请换用其他浏览器观看");
  364. // return;
  365. // }
  366. //
  367. // }
  368. createHlsVodPlayer(paras);
  369. } else if((paras.playerType==="audio_full" || paras.playerType==="audio" || paras.isAudio==="true" || paras.isAudio===true) && !!document.createElement('audio').canPlayType) {
  370. createCommonAudioPlayer(paras);
  371. } else if(isIPad() || ((paras.isAudio||paras.playerType==="audio_full" || paras.playerType==="audio")&&((navigator.userAgent.indexOf("rv:11")>0)||navigator.userAgent.indexOf("MSIE")===-1))) {
  372. var vdnUrl = "http://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=" + paras.videoCenterId + "&tai=ipad&client=html5&im=1";
  373. var jsUrl = "http://js.player.cntv.cn/creator/html5player_standard_multi.js";
  374. if(vodPlayerObjs.isHttps === "true") {
  375. vdnUrl = "https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=" + paras.videoCenterId + "&tai=ipad&client=html5&im=1";
  376. jsUrl = "https://js.player.cntv.cn/creator/html5player_standard_multi.js";
  377. }
  378. if(vodPlayerObjs.isLoadedOldH5Player) {
  379. var isJsLoadedTimer = setInterval(function () {
  380. if(typeof commonHtml5Player === "function") {
  381. clearInterval(isJsLoadedTimer);
  382. commonHtml5Player(paras.divId,paras.w,paras.h,vdnUrl, paras.isAutoPlay, paras.posterImg, paras.isAudio);
  383. }
  384. }, 100);
  385. } else {
  386. vodPlayerObjs.isLoadedOldH5Player = true;
  387. var _doc = document.getElementsByTagName("head")[0];
  388. var jsLoader = createElementByType("script","jsH5PlayerLoader","absolute","0px","0px","0px","0px");
  389. jsLoader.src = jsUrl;
  390. _doc.appendChild(jsLoader);
  391. jsLoader.onload = function() {
  392. commonHtml5Player(paras.divId,paras.w,paras.h,vdnUrl, paras.isAutoPlay, paras.posterImg, paras.isAudio);
  393. };
  394. }
  395. document.addEventListener('visibilitychange', function() {
  396. var isHidden = document.hidden;
  397. var player = document.getElementById("html5Player-" + paras.divId);
  398. if(isHidden) {
  399. if(player) {
  400. player.pause();
  401. }
  402. } else{
  403. if(player) {
  404. //player.play();
  405. }
  406. }
  407. }, false);
  408. } else {
  409. //如果是计费或奥运会且用flash播放器播,就提示用户换播放器
  410. if(paras.vdn && paras.vdn.vtoken || location.href.indexOf("olympicchannelchina.cn")!==-1 || location.href.indexOf("csmpte.com")!==-1) {
  411. var showMsg = "<p>您当前的浏览器不支持付费视频播放</p>" + "<p>请更换浏览器或设备</p>" + "<p>(如果是360、QQ或搜狗浏览器,须使用极速模式观看)</p>";
  412. if(location.href.indexOf("olympicchannelchina.cn")!==-1 || location.href.indexOf("csmpte.com")!==-1) {
  413. showMsg = showMsg.replace("付费", "");
  414. }
  415. showVodPlayerMsg(paras, showMsg);
  416. return;
  417. }
  418. if(!paras.isAudio || (navigator.userAgent.indexOf("MSIE")>0) || (getChromeVersion()>=55&&flashChecker().v<23))
  419. {
  420. getFlashVer();
  421. }
  422. if(!isFlashPlayer && !isIPad()) {
  423. showInstallFlashPlayerMsg(paras.divId, paras.w, paras.h);
  424. return;
  425. }
  426. var playerUrl = "http://player.cntv.cn/standard/cntvplayerQC20190719.swf";
  427. var version = "2019.07.02";
  428. var adversion = 'ad0.171.5.8.4.5.4';
  429. var widgetsConfigPath = "http://js.player.cntv.cn/xml/widgetsConfig/common.xml";
  430. var widgetsSwfPath = "http://player.cntv.cn/widgets/wg/WidgetButton20150514.swf";
  431. var widgetsXmlPath = "http://js.player.cntv.cn/xml/widgetsPlugXml/chinese.xml";
  432. var fo = null;
  433. if(paras.isHttps === "true") {
  434. playerUrl = "https://player.cntv.cn/standard/cntvplayerQC20190719.swf";
  435. widgetsConfigPath = "https://js.player.cntv.cn/xml/widgetsConfig/common.xml";
  436. widgetsSwfPath = "https://player.cntv.cn/widgets/wg/WidgetButton20150514.swf";
  437. widgetsXmlPath = "https://js.player.cntv.cn/xml/widgetsPlugXml/chinese.xml";
  438. }
  439. if(paras.playerType === "vod_drm" || location.href.indexOf("livechina.cctv.com")!==-1) {
  440. playerUrl = "http://player.cntv.cn/standard/cntvplayerDRM20200429.swf";
  441. }
  442. if(paras.isAudio) {
  443. playerUrl = "http://player.cntv.cn/standard/cntvTheatreAudioPlayer.swf";
  444. if(paras.isHttps === "true") {
  445. playerUrl = "https://player.cntv.cn/standard/cntvTheatreAudioPlayer.swf";
  446. }
  447. }
  448. if(paras.playerType === "pandavod_h5") {
  449. playerUrl = "http://player.cntv.cn/standard/ipandaplayerVOD210120.swf";
  450. widgetsXmlPath="//js.player.cntv.cn/xml/widgetsPlugXml/ipanda.xml";
  451. }
  452. if(paras.isHttps === "true") {
  453. playerUrl = playerUrl.replace("http://", "https://");
  454. }
  455. if(IsMaxthon()) {
  456. fo = new SWFObject(playerUrl+"?v="+version+"&a="+Math.random(), "flashplayer_" + paras.divId, "100%", "100%", "10.0.0.0", "#000000");
  457. }else {
  458. fo = new SWFObject(playerUrl+"?v="+version, "flashplayer_" + paras.divId, "100%", "100%", "10.0.0.0", "#000000");
  459. }
  460. fo.addVariable("playerId", "flashplayer_" + paras.divId);
  461. if(paras.isAudio) {
  462. fo.addVariable("isAudio", true);
  463. fo.addVariable("pid",paras.videoCenterId);
  464. }
  465. if(typeof(ad_Wenzi)!="undefined") {
  466. fo.addVariable("adText", ad_Wenzi);
  467. }
  468. if(typeof(ad_Banner)!="undefined") {
  469. fo.addVariable("adBanner", ad_Banner);
  470. }
  471. if(typeof(ad_Calls)!="undefined") {
  472. fo.addVariable("adCalls",ad_Calls);
  473. }
  474. if(typeof(ad_Pause)!="undefined") {
  475. fo.addVariable("adPause", ad_Pause);
  476. }
  477. if(typeof(ad_After)!="undefined") {
  478. fo.addVariable("adAfter", ad_After);
  479. }
  480. fo.addVariable("id", paras.id);
  481. fo.addVariable("videoId", paras.videoId); //瑙嗛闆唅d
  482. fo.addVariable("articleId", paras.articleId);
  483. fo.addVariable("filePath", paras.filePath);
  484. fo.addVariable("sysSource", paras.sysSource);//瑙嗛鏉ユ簮
  485. fo.addVariable("channelId", paras.channelId);
  486. fo.addVariable("url", paras.url);//瑙嗛椤甸潰url锛屽
  487. fo.addVariable("scheduleId", paras.scheduleId);//鍏抽敭瀛�
  488. fo.addVariable("videoCenterId",paras.videoCenterId); //瑙嗛鐢熶骇涓績guid (蹇呰鍊�)
  489. fo.addVariable("isLogin", paras.isLogin);//鐢ㄦ埛涓績鐩稿叧
  490. fo.addVariable("userId", paras.userId);//鐢ㄦ埛涓績鐩稿叧
  491. fo.addVariable("wideMode", paras.wideMode);
  492. fo.addVariable("listMode", paras.listMode);
  493. fo.addVariable("nextTitle", paras.nextTitle);
  494. fo.addVariable("nextThumbnail", paras.nextThumbnail);
  495. fo.addVariable("setupOn", paras.setupOn);
  496. fo.addVariable("hasBarrage", paras.hasBarrage);
  497. fo.addVariable("barrageApp", paras.barrageApp);
  498. fo.addVariable("playerType", paras.playerType);
  499. fo.addVariable("webFullScreenOn", paras.webFullScreenOn);
  500. if(paras.isLeftBottom) {
  501. fo.addVariable("isLeftBottom", "true");
  502. }
  503. if(paras.posterImg && paras.posterImg.length > 3) {
  504. fo.addVariable("preImage", paras.posterImg);
  505. }
  506. if(paras.isVod4k === "true") {
  507. fo.addVariable("isVod4k", "true");
  508. }
  509. //鐢╤ttps鏂瑰紡
  510. if(paras.isHttps === "true") {
  511. fo.addVariable("https", "true");
  512. fo.addVariable("adplayerPath", "https://player.cntv.cn/adplayer/cntvAdPlayer.swf?v="+adversion);
  513. fo.addVariable("pauseAdplayerPath", "https://player.cntv.cn/adplayer/cntvPauseAdPlayer.swf?v="+adversion);
  514. fo.addVariable("cornerAdplayerPath", "https://player.cntv.cn/adplayer/cntvCornerADPlayer.swf?v="+adversion);
  515. fo.addVariable("hotmapPath", "https://player.cntv.cn/standard/cntvHotmap.swf?v="+adversion);
  516. fo.addVariable("dynamicDataPath", "https://vdn.apps.cntv.cn/api/getHttpVideoInfo.do");
  517. fo.addVariable("floatLogoURL", "https://player.cntv.cn/flashplayer/logo/fhMaskLogo.png");
  518. fo.addVariable("qmServerPath", "https://log.player.cntv.cn/stat.html");
  519. } else{
  520. fo.addVariable("adplayerPath", "http://player.cntv.cn/adplayer/cntvAdPlayer.swf?v="+adversion);
  521. fo.addVariable("pauseAdplayerPath", "http://player.cntv.cn/adplayer/cntvPauseAdPlayer.swf?v="+adversion);
  522. fo.addVariable("cornerAdplayerPath", "http://player.cntv.cn/adplayer/cntvCornerADPlayer.swf?v="+adversion);
  523. fo.addVariable("hotmapPath", "http://player.cntv.cn/standard/cntvHotmap.swf?v="+adversion);
  524. fo.addVariable("dynamicDataPath", "http://vdn.apps.cntv.cn/api/getHttpVideoInfo.do");
  525. fo.addVariable("floatLogoURL", "http://player.cntv.cn/flashplayer/logo/fhMaskLogo.png");
  526. fo.addVariable("qmServerPath", "http://log.player.cntv.cn/stat.html");
  527. }
  528. if(paras.drm === "true") {
  529. fo.addVariable("drm", "true");
  530. }
  531. if(paras.playerType === "pandavod_h5") {
  532. fo.addVariable("widgetsXmlPath",widgetsXmlPath);
  533. fo.addVariable("languageConfig", "");
  534. }
  535. fo.addVariable("usrOs", clientInfo.os);
  536. fo.addVariable("usrBroswer", clientInfo.browser+":"+clientInfo.broserVersion);
  537. fo.addVariable("screenInfo",window.screen.width+"*"+window.screen.height);
  538. fo.addVariable("platform",navigator.platform);
  539. fo.addVariable("isTianRun","true");
  540. fo.addVariable("isShowSmallWindow","true");
  541. fo.addVariable("widgetsConfig",widgetsConfigPath);
  542. //fo.addVariable("languageConfig", languageConfigPath);
  543. fo.addVariable("language", paras.language);
  544. fo.addVariable("logoImageURL", "");
  545. fo.addVariable("logoURL", "http://www.cntv.cn/");
  546. fo.addVariable("qmFrequency", "1");
  547. fo.addVariable("tai", paras.t);
  548. fo.addVariable("referrer", document.referrer);
  549. fo.addVariable("isUseDynamicData", "true");
  550. fo.addVariable("dynamicFrequency", "1.0");
  551. fo.addVariable("isProtected", "true");
  552. fo.addVariable("isP2pInstall","false");
  553. fo.addVariable("floatLogoTrigger", "false");
  554. fo.addVariable("isAutoPlay", paras.isAutoPlay);
  555. fo.addVariable("isDefaultPreImage", paras.isDefaultPreImage);
  556. fo.addVariable("isConviva","true");
  557. fo.addVariable("isAkamaiAnility","true");
  558. if(window.location.href.indexOf("cntv.cn")!=-1 || window.location.href.indexOf("cctv.com")!=-1) {
  559. fo.addVariable("useP2pMode","true");
  560. } else{
  561. fo.addVariable("useP2pMode","false");
  562. }
  563. try{
  564. if(typeof(sns_userid)=="undefined")
  565. {
  566. sns_userid = window.parent.sns_userid;
  567. sns_islogin = window.parent.passport.isLoginedStatus().toString();
  568. }
  569. else
  570. {
  571. sns_islogin = passport.isLoginedStatus().toString();
  572. }
  573. if(sns_userid == null)
  574. {
  575. sns_userid = "";
  576. }
  577. }
  578. catch(e){
  579. sns_userid = "";
  580. sns_islogin = "false";
  581. }
  582. if(sns_islogin=="true"){
  583. fo.addVariable("isLogin", sns_islogin);
  584. fo.addVariable("userId", sns_userid);
  585. }
  586. //鎶婃寚绾逛俊鎭紶缁欐挱鏀惧櫒
  587. fo.addVariable("fingerprint",Fingerprint);
  588. fo.addParam("menu","false");
  589. fo.addParam("allowFullScreen", "true");
  590. fo.addParam("allowScriptAccess","always");
  591. fo.addParam("wmode", paras.wmode);
  592. writeFlashPlayer(fo, paras.divId);
  593. //æ’­æ”¾å™¨å®¹å™¨çš„åŽŸå§‹æ ·å¼
  594. try{
  595. var contanerObj = document.getElementById(paras.divId);
  596. var originalStyle = contanerObj.style.cssText;
  597. if(!originalStyle || originalStyle.length<4) {
  598. originalStyle = "none";
  599. }
  600. document.getElementById("flashplayer_" + paras.divId).setAttribute("originalStyle", originalStyle);
  601. } catch (e) {
  602. }
  603. }
  604. }
  605. function getHtml5VideoData() {
  606. }
  607. function destroyH5VodHls(paras) {
  608. }
  609. //HLS的H5点播
  610. function createHlsVodPlayer(paras) {
  611. var container = document.getElementById(paras.divId);
  612. if(vodPlayerObjs[paras.divId]) {
  613. clearInterval(vodPlayerObjs[paras.divId].vodTimer);
  614. }
  615. //若vdn重试超过4次,就给提示信息
  616. if(paras.vdnRetryNum && paras.vdnRetryNum>4) {
  617. showVodPlayerErrorMsg(paras);
  618. return;
  619. }
  620. if(vodPlayerObjs[paras.divId] && (vodPlayerObjs[paras.divId].video && vodPlayerObjs[paras.divId].video.hls || vodPlayerObjs[paras.divId].adCallsVideo)) {
  621. destroyH5VodHls(paras);
  622. }
  623. if(vodPlayerObjs[paras.divId] && vodPlayerObjs[paras.divId].video) {
  624. clearInterval(vodPlayerObjs[paras.divId].video.playedTimer);
  625. }
  626. if(typeof goldlog!="undefined" && goldlog["html5Player-"+paras.divId] && typeof heartbeatStarted!=="undefined") {
  627. heartbeatStarted = false;
  628. }
  629. if(document.getElementById("html5Player-"+paras.divId)) {
  630. removeH5VodPlayerEvents(paras.divId);
  631. if(isVodCanvasSupported(paras.divId)) {
  632. document.body.removeChild(document.getElementById("html5Player-"+paras.divId));
  633. clearInterval(vodPlayerObjs[paras.divId].canvasDrawTimer);
  634. } else{
  635. container.removeChild(document.getElementById("html5Player-"+paras.divId));
  636. }
  637. clearInterval(vodPlayerObjs[paras.divId].canvasDrawTimer);
  638. }
  639. container.innerHTML = "";
  640. vodPlayerObjs[paras.divId] = {};
  641. vodPlayerObjs[paras.divId] = paras;
  642. vodPlayerObjs[paras.divId].video = {};
  643. vodPlayerObjs[paras.divId].adCallsVideo = {};
  644. if(vodConvivaClient && vodConvivaClient.cleanupSession && vodPlayerObjs[paras.divId].convivaSessionKey!==undefined) {
  645. vodConvivaClient.cleanupSession(vodPlayerObjs[paras.divId].convivaSessionKey);
  646. }
  647. vodPlayerObjs[paras.divId].convivaSessionKey = undefined;
  648. //设置播放器的背景图片
  649. var bgImg = "cctv_html5player_bg_16X9.png";
  650. if(paras.h/paras.w > 1) {
  651. bgImg = "cctv_html5player_bg_9X16.png";
  652. }
  653. var container = document.getElementById(paras.divId);
  654. container.style.zIndex = "2";
  655. container.style.overflow = "hidden";
  656. var convivaJsApi1 = vodUrlProtocol + "js.player.cntv.cn/creator/conviva-core-sdk.min.js";
  657. var convivaJsApi2 = vodUrlProtocol + "js.player.cntv.cn/creator/conviva-html5native-impl2.js";
  658. var aliApiUrl = vodUrlProtocol + "js.player.cntv.cn/creator/html5player_analysis_lib.js";
  659. var containerBgImg = vodUrlProtocol + "player.cntv.cn/html5Player/images/" + bgImg;
  660. var h5PlayerJs = vodUrlProtocol + "js.player.cntv.cn/creator/vodplayer_controls.js";
  661. //vodPlayerObjs[paras.divId].title = "";
  662. //前贴广告
  663. vodPlayerObjs[paras.divId].adCalls = "";
  664. if(typeof ad_Call_h5_m === "string" && ad_Call_h5_m.length>2) {
  665. vodPlayerObjs[paras.divId].adCalls = decodeURIComponent(ad_Call_h5_m);
  666. if(vodPlayerObjs[paras.divId].adCalls.indexOf("?") > 0) {
  667. vodPlayerObjs[paras.divId].adCalls += "&cb=parseVodAdCallsDataFromApi";
  668. } else{
  669. vodPlayerObjs[paras.divId].adCalls += "?cb=parseVodAdCallsDataFromApi";
  670. }
  671. if(vodPlayerObjs[paras.divId].adCalls.indexOf("op=7")===-1) {
  672. vodPlayerObjs[paras.divId].adCalls = vodPlayerObjs[paras.divId].adCalls.replace(/(op=[0-9]*)/, "op=7");
  673. }
  674. //存储前贴广告接口,重复播放用
  675. vodPlayerObjs[paras.divId].adCallsRepeat = vodPlayerObjs[paras.divId].adCalls;
  676. }
  677. //暂停广告
  678. vodPlayerObjs[paras.divId].adPause = "";
  679. if(typeof ad_Pause_h5_m === "string" && ad_Pause_h5_m.length>2) {
  680. vodPlayerObjs[paras.divId].adPause = decodeURIComponent(ad_Pause_h5_m);
  681. if(vodPlayerObjs[paras.divId].adPause.indexOf("?") > 0) {
  682. vodPlayerObjs[paras.divId].adPause += "";
  683. } else{
  684. vodPlayerObjs[paras.divId].adPause += "";
  685. }
  686. if(vodPlayerObjs[paras.divId].adPause.indexOf("op=7")===-1) {
  687. vodPlayerObjs[paras.divId].adPause = vodPlayerObjs[paras.divId].adPause.replace(/(op=[0-9]*)/, "op=7");
  688. }
  689. }
  690. //banner广告
  691. vodPlayerObjs[paras.divId].adBanner = "";
  692. if(typeof ad_Banner_h5_m === "string" && ad_Banner_h5_m.length>2) {
  693. vodPlayerObjs[paras.divId].adBanner = decodeURIComponent(ad_Banner_h5_m);
  694. if(vodPlayerObjs[paras.divId].adBanner.indexOf("?") > 0) {
  695. vodPlayerObjs[paras.divId].adBanner += "&cb=parseVodAdBannerDataFromApi";
  696. } else{
  697. vodPlayerObjs[paras.divId].adBanner += "?cb=parseVodAdBannerDataFromApi";
  698. }
  699. if(vodPlayerObjs[paras.divId].adBanner.indexOf("op=7")===-1) {
  700. vodPlayerObjs[paras.divId].adBanner = vodPlayerObjs[paras.divId].adBanner.replace(/(op=[0-9]*)/, "op=7");
  701. }
  702. }
  703. //后贴广告
  704. vodPlayerObjs[paras.divId].adAfter = "";
  705. if(typeof ad_After_h5_m === "string" && ad_After_h5_m.length>2) {
  706. vodPlayerObjs[paras.divId].adAfter = decodeURIComponent(ad_After_h5_m);
  707. if(vodPlayerObjs[paras.divId].adAfter.indexOf("?") > 0) {
  708. vodPlayerObjs[paras.divId].adAfter += "&cb=parseVodAdCallsDataFromApi";
  709. } else{
  710. vodPlayerObjs[paras.divId].adAfter += "?cb=parseVodAdCallsDataFromApi";
  711. }
  712. if(vodPlayerObjs[paras.divId].adAfter.indexOf("op=7")===-1) {
  713. vodPlayerObjs[paras.divId].adAfter = vodPlayerObjs[paras.divId].adAfter.replace(/(op=[0-9]*)/, "op=7");
  714. }
  715. }
  716. if(paras.isHttps === "true") {
  717. if(vodPlayerObjs[paras.divId].adCalls) {
  718. vodPlayerObjs[paras.divId].adCallsRepeat = vodPlayerObjs[paras.divId].adCalls = vodPlayerObjs[paras.divId].adCalls.replace("http://", "https://");
  719. }
  720. if(vodPlayerObjs[paras.divId].adPause) {
  721. vodPlayerObjs[paras.divId].adPause = vodPlayerObjs[paras.divId].adPause.replace("http://", "https://");
  722. }
  723. if(vodPlayerObjs[paras.divId].adBanner) {
  724. vodPlayerObjs[paras.divId].adBanner = vodPlayerObjs[paras.divId].adBanner.replace("http://", "https://");
  725. }
  726. if(vodPlayerObjs[paras.divId].adAfter) {
  727. vodPlayerObjs[paras.divId].adAfter = vodPlayerObjs[paras.divId].adAfter.replace("http://", "https://");
  728. }
  729. }
  730. if(isIPad()) {
  731. container.style.backgroundImage = "url('" + containerBgImg + "')";
  732. container.style.backgroundSize = "100% 100%";
  733. container.style.backgroundRepeat = "no-repeat";
  734. container.style.backgroundPosition = "0px 0px";
  735. //container.style.margin = "0 auto";
  736. } else{
  737. container.style.backgroundColor = "#000";
  738. }
  739. createVodVideoLoadingImg(paras);
  740. var vdnUrl = "";
  741. var vdnData = "";
  742. //设置播放器的背景图片
  743. var container = document.getElementById(paras.divId);
  744. //container.style.position = "relative";
  745. var bgImg = "cctv_html5player_bg_16X9.png";
  746. if(paras.h/paras.w > 1) {
  747. bgImg = "cctv_html5player_bg_9X16.png";
  748. }
  749. container.style.backgroundImage = "url('" + vodUrlProtocol + "player.cntv.cn/html5Player/images/" + bgImg + "')";
  750. vdnUrl = vodUrlProtocol + "vdn.apps.cntv.cn/api/getHttpVideoInfo.do";
  751. vdnData += "pid=" + paras.videoCenterId + "&tai=ipad&client=html5";
  752. if(isIPad()) {
  753. vdnData += "&im=1";
  754. } else{
  755. vdnData += "&im=0";
  756. }
  757. container.style.backgroundSize = "100% 100%";
  758. container.style.backgroundRepeat = "no-repeat";
  759. container.style.backgroundPosition = "0px 0px";
  760. vodPlayerObjs[paras.divId].video = {};
  761. vodPlayerObjs[paras.divId].adCallsVideo = {};
  762. var workerUrl = vodUrlProtocol + "js.player.cntv.cn/creator/h5vod.worker?v=211215";
  763. if(!(/(iphone|ipad)/i.test(navigator.userAgent)) && isWasmSupported()) {
  764. if(!vodPlayerObjs.isLoadWorker) {
  765. vodPlayerObjs.isLoadWorker = true;
  766. //loadLiveScript(workerUrl, null, null);
  767. LazyLoad.js(workerUrl, function(){
  768. if(typeof CNTVModule !== "undefined") {
  769. CNTVH5PlayerModule = CNTVModule();
  770. window.CNTVH5PlayerModule = CNTVH5PlayerModule;
  771. CNTVH5PlayerModule.onRuntimeInitialized = function () {
  772. console.log("onRuntimeInitialized");
  773. moduleInitialized = true;
  774. }
  775. }
  776. });
  777. }
  778. }
  779. //对接口文档的新字段进行初始化;
  780. var vdn_tsp =new Date().getTime().toString().slice(0,10);
  781. var vdn_vn = "2049";
  782. var vdn_vc = "";
  783. var staticCheck = "47899B86370B879139C08EA3B5E88267";
  784. var vdn_uid = "";
  785. var vdn_wlan = "";
  786. //获取cookie
  787. if(typeof(getCookie_vdn)=="function"){
  788. if(!getCookie_vdn("Fingerprint")){
  789. //获取设备指纹信息
  790. if(typeof(getfingerprint)=="function" && typeof(getfingerprint)!="undefined" && !vodPlayerObjs.isFingerprintJsLoading){
  791. getfingerprint();
  792. }
  793. } else{
  794. vdn_uid = getCookie_vdn("Fingerprint");
  795. }
  796. }
  797. //md5åŠ å¯† åŠ¨æ€æ ¡éªŒç 
  798. var vdn_vc = md5((vdn_tsp+vdn_vn+staticCheck+vdn_uid)).toUpperCase();
  799. //æ·»åŠ æ–°å­—æ®µ
  800. vdnData += "&tsp="+vdn_tsp + "&vn="+ vdn_vn + "&vc="+vdn_vc + "&uid="+vdn_uid + "&wlan="+vdn_wlan;
  801. vodPlayerObjs[paras.divId].isErrorDone = false;
  802. vodPlayerObjs.convivaJsLoaded = false;
  803. //兼容页面定义的vdn变量冲突问题
  804. if(paras.vdn && !paras.vdnParasFromPage) {
  805. paras.vdnParasFromPage = paras.vdn;
  806. }
  807. vodPlayerObjs[paras.divId].vdn = {};
  808. vodPlayerObjs[paras.divId].vdn.vdnUrl = vdnUrl + "?" + vdnData;
  809. if(typeof createVodHls !== "undefined") {
  810. doLoadVodDataByAjax(vdnUrl, vdnData, parseVodDataFromVdn, paras, parseVodDataFromVdnWhenError, 10000);
  811. //loadVodScript(vodPlayerObjs[paras.divId].vdn.vdnUrl, parseVodDataFromVdn, paras, parseVodDataFromVdnWhenError, 10000);
  812. loadH5VodConviva(paras, convivaJsApi1, convivaJsApi2);
  813. } else{
  814. if(vodPlayerObjs.isLoadedPlayerJs) {
  815. if(typeof createVodHls !== "undefined") {
  816. doLoadVodDataByAjax(vdnUrl, vdnData, parseVodDataFromVdn, paras, parseVodDataFromVdnWhenError, 10000);
  817. //loadVodScript(vodPlayerObjs[paras.divId].vdn.vdnUrl, parseVodDataFromVdn, paras, parseVodDataFromVdnWhenError, 10000);
  818. loadH5VodConviva(paras, convivaJsApi1, convivaJsApi2);
  819. } else{
  820. vodPlayerObjs[paras.divId].isCreatePlayer = false;
  821. var tryNum = 0;
  822. vodPlayerObjs[paras.divId].loadPlayerJsTimer = setInterval(function () {
  823. tryNum += 100;
  824. if(typeof createVodHls !== "undefined" && !vodPlayerObjs[paras.divId].isCreatePlayer) {
  825. clearInterval(vodPlayerObjs[paras.divId].loadPlayerJsTimer);
  826. vodPlayerObjs[paras.divId].isCreatePlayer = true;
  827. doLoadVodDataByAjax(vdnUrl, vdnData, parseVodDataFromVdn, paras, parseVodDataFromVdnWhenError, 10000);
  828. //loadVodScript(vodPlayerObjs[paras.divId].vdn.vdnUrl, parseVodDataFromVdn, paras, parseVodDataFromVdnWhenError, 10000);
  829. loadH5VodConviva(paras, convivaJsApi1, convivaJsApi2);
  830. }
  831. if(tryNum > 60000) {
  832. clearInterval(vodPlayerObjs[paras.divId].loadPlayerJsTimer);
  833. }
  834. }, 100);
  835. }
  836. } else{
  837. LazyLoad.js(h5PlayerJs, function(){
  838. doLoadVodDataByAjax(vdnUrl, vdnData, parseVodDataFromVdn, paras, parseVodDataFromVdnWhenError, 10000);
  839. //loadVodScript(vodPlayerObjs[paras.divId].vdn.vdnUrl, parseVodDataFromVdn, paras, parseVodDataFromVdnWhenError, 10000);
  840. loadH5VodConviva(paras, convivaJsApi1, convivaJsApi2);
  841. });
  842. }
  843. setTimeout(function () {
  844. clearInterval(vodPlayerObjs[paras.divId].loadPlayerJsTimer);
  845. if(typeof createVodHls === "undefined") {
  846. showVodPlayerErrorMsg(paras);
  847. }
  848. }, 8000);
  849. }
  850. vodPlayerObjs.isLoadedPlayerJs = true;
  851. vodPlayerObjs.aliJsLoaded = false;
  852. if(!isAliApiLoaded && isUseAliMonitor) {
  853. isAliApiLoaded = true;
  854. LazyLoad.js(aliApiUrl, function(){
  855. vodPlayerObjs.aliJsLoaded = true;
  856. });
  857. }
  858. try{
  859. var containerObj = document.getElementById(paras.divId);
  860. var originalStyle = containerObj.style.cssText;
  861. if(!originalStyle || originalStyle.length<4) {
  862. originalStyle = "none";
  863. }
  864. if(document.getElementById(paras.divId)) {
  865. document.getElementById(paras.divId).setAttribute("originalStyle", originalStyle);
  866. }
  867. } catch (e) {
  868. }
  869. }
  870. function isHlsVodPlayer(paras) {
  871. var isSurported = true;
  872. isSurported = isIPad() && paras.isAudio!=="true" && !paras.isAudio&&((navigator.userAgent.indexOf("rv:11")===-1)&&navigator.userAgent.indexOf("MSIE")===-1);
  873. return isSurported;
  874. }
  875. function createCommonAudioPlayer(paras) {
  876. var audioPlayerJs = vodUrlProtocol + "js.player.cntv.cn/creator/audioplayer.js";
  877. if(vodPlayerObjs.isAudioLoadedPlayerJs) {
  878. if(typeof createrAudioPlayer !== "undefined") {
  879. loadVodScript(audioPlayerJs, createrAudioPlayer, paras);
  880. //loadH5VodConviva(paras, convivaJsApi1, convivaJsApi2);
  881. } else{
  882. vodPlayerObjs[paras.divId].isCreatePlayer = false;
  883. var tryNum = 0;
  884. vodPlayerObjs[paras.divId].loadPlayerJsTimer = setInterval(function () {
  885. tryNum += 100;
  886. if(typeof createrAudioPlayer !== "undefined" && !vodPlayerObjs[paras.divId].isCreatePlayer) {
  887. clearInterval(vodPlayerObjs[paras.divId].loadPlayerJsTimer);
  888. createrAudioPlayer(paras);
  889. //loadH5VodConviva(paras, convivaJsApi1, convivaJsApi2);
  890. }
  891. if(tryNum > 60000) {
  892. clearInterval(vodPlayerObjs[paras.divId].loadPlayerJsTimer);
  893. }
  894. }, 100);
  895. }
  896. } else{
  897. LazyLoad.js(audioPlayerJs, function(){
  898. if(typeof createrAudioPlayer === "function") {
  899. createrAudioPlayer(paras);
  900. }
  901. //loadH5VodConviva(paras, convivaJsApi1, convivaJsApi2);
  902. });
  903. }
  904. setTimeout(function () {
  905. clearInterval(vodPlayerObjs[paras.divId].loadPlayerJsTimer);
  906. if(typeof createrAudioPlayer === "undefined") {
  907. showVodPlayerErrorMsg(paras);
  908. }
  909. }, 8000);
  910. vodPlayerObjs.isAudioLoadedPlayerJs = true;
  911. }
  912. function doLoadAliAnalyticsJs() {
  913. var jsLoader = createElementByType("script","convivaJs237","absolute","0px","0px","0px","0px");
  914. jsLoader.src = vodUrlProtocol + "js.data.cctv.com/__aplus_plugin_cctv.js,aplus_plugin_aplus_u.js";
  915. var _doc = document.getElementsByTagName('head')[0];
  916. _doc.appendChild(jsLoader);
  917. }
  918. function loadVodScript(src, cb, paras, errorCb, timeout, errorTimerout) {
  919. var _doc = document.getElementsByTagName("head")[0];
  920. var jsLoader= document.createElement('script');
  921. jsLoader.type= 'text/javascript';
  922. jsLoader.onload = function() {
  923. if(typeof cb === "function") {
  924. if(timeout && timeout<1000) {
  925. setTimeout(function () {
  926. cb(paras);
  927. }, timeout);
  928. } else{
  929. cb(paras);
  930. }
  931. }
  932. };
  933. jsLoader.onerror = function() {
  934. if(typeof errorCb === "function") {
  935. errorCb(paras);
  936. }
  937. };
  938. jsLoader.src = src;
  939. _doc.appendChild(jsLoader);
  940. if(errorCb && (timeout && timeout>=1000 || errorTimerout&&errorTimerout>=1000)) {
  941. var tout = timeout>=1000 ? timeout : errorTimerout;
  942. setTimeout(function () {
  943. errorCb(paras);
  944. }, tout);
  945. }
  946. }
  947. function loadH5VodConviva(paras, convivaJsApi1, convivaJsApi2) {
  948. if(isUseConvivaMonitor) {
  949. if(!isConvivaApiLoaded && typeof Html5PlayerInterface === "undefined") {
  950. isConvivaApiLoaded = true;
  951. LazyLoad.js(convivaJsApi1, function(){
  952. LazyLoad.js(convivaJsApi2, function(){
  953. vodPlayerObjs.convivaJsLoaded = true;
  954. initVodConviva(paras);
  955. });
  956. });
  957. } else if(vodPlayerObjs.convivaJsLoaded || typeof Html5PlayerInterface !== "undefined"){
  958. initVodConviva(paras);
  959. } else{
  960. var checkConvivaCount = 0;
  961. vodPlayerObjs.loadConvivaTimer = setInterval(function () {
  962. checkConvivaCount++;
  963. if(checkConvivaCount > 50) {
  964. clearInterval(vodPlayerObjs.loadConvivaTimer);
  965. }
  966. if(typeof Html5PlayerInterface !== "undefined") {
  967. clearInterval(vodPlayerObjs.loadConvivaTimer);
  968. initVodConviva(paras);
  969. }
  970. }, 200);
  971. }
  972. }
  973. }
  974. function isVodCanvasSupported(divId) {
  975. var isSupported = false;
  976. var canvas = document.getElementById("h5canvas_"+divId);
  977. if(canvas && canvas.getContext && isIPad()) {
  978. isSupported = true;
  979. }
  980. var ua = navigator.userAgent.toLowerCase();
  981. if(ua.indexOf("oppobrowser")>0 || ua.indexOf("firefox")>0 || ua.indexOf("liebao")>0 || ua.indexOf("oneplus")>0) {
  982. isSupported = false;
  983. }
  984. //强制不用canvas
  985. if(isVodMobileUseBrowerUi) {
  986. isSupported = false;
  987. }
  988. return isSupported;
  989. }
  990. function isVodHlsJsSupported() {
  991. var mediaSource = window.MediaSource || window.WebKitMediaSource;
  992. if (!mediaSource) {
  993. return false;
  994. }
  995. if(/(iphone|ipad)/i.test(navigator.userAgent)) {
  996. return false;
  997. }
  998. // var isSafari = /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent);
  999. // if(isSafari){
  1000. // return false;
  1001. // }
  1002. var sourceBuffer = SourceBuffer || window.WebKitSourceBuffer;
  1003. var isTypeSupported = mediaSource && typeof mediaSource.isTypeSupported === 'function' && mediaSource.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"'); // if SourceBuffer is exposed ensure its API is valid
  1004. // safari and old version of Chrome doe not expose SourceBuffer globally so checking SourceBuffer.prototype is impossible
  1005. var sourceBufferValidAPI = !sourceBuffer || sourceBuffer.prototype && typeof sourceBuffer.prototype.appendBuffer === 'function' && typeof sourceBuffer.prototype.remove === 'function';
  1006. return !!isTypeSupported && !!sourceBufferValidAPI;
  1007. }
  1008. function isWasmSupported() {
  1009. try {
  1010. if (typeof WebAssembly === "object"
  1011. && typeof WebAssembly.instantiate === "function") {
  1012. var module = new WebAssembly.Module(Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00));
  1013. if (module instanceof WebAssembly.Module)
  1014. return new WebAssembly.Instance(module) instanceof WebAssembly.Instance;
  1015. }
  1016. } catch (e) {
  1017. }
  1018. return false;
  1019. }
  1020. function isVodPayPlayerSupported() {
  1021. return isVodHlsJsSupported() && isWasmSupported();
  1022. }
  1023. function createVodVideoLoadingImg(paras) {
  1024. var htmls = "";
  1025. htmls = '<div id="loading_' + paras.divId + '" style="position:absolute;top:42%;margin:0 auto;text-align:center;width:100%;height:42px;cursor:pointer;z-index:20;display:none;">';
  1026. htmls += '<img src="' + vodUrlProtocol + 'player.cntv.cn/html5Player/images/cctv_html5player_loading.gif" style="width:120px;height:42px;display:inline-block;">';
  1027. htmls += '</div>';
  1028. document.getElementById(paras.divId).insertAdjacentHTML("afterBegin", htmls);
  1029. }
  1030. function writeFlashPlayer(fo, divId) {
  1031. if(typeof goldlog === "undefined" && !document.getElementById("convivaJs237")) {
  1032. doLoadAliAnalyticsJs();
  1033. }
  1034. if(sns_islogin=="true" && !document.getElementById("myForm_"+divId)) {
  1035. var myBody = document.getElementsByTagName('body')[0];
  1036. var _bdiv = document.createElement("div");
  1037. _bdiv.style.display = "none";
  1038. var s = '<form id="myForm_'+divId+'" method="post" action="//history.apps.cntv.cn/interface/service.php">';
  1039. s = s+'<input id="method_' + divId +'" name="method_' + divId +'" value="video.setVideoPosition">';
  1040. s= s+'<input id="client_' + divId +'" name="client_' + divId +'" value=1>';
  1041. s =s+'<input id="data_'+ divId +'" name="data_'+ divId +'" value="" >';
  1042. s =s+'<iframe id="myFrame_' + divId +'" name="myFrame_' + divId +'"></iframe></form>';
  1043. _bdiv.innerHTML =s;
  1044. myBody.appendChild(_bdiv);
  1045. }
  1046. if(sns_islogin=="true" && clientInfo.browser=="Firefox" && sns_islogin=="true") {
  1047. if(window.name!=""&&typeof(window.name)!="undefined"&&window.name.length>0)
  1048. {
  1049. setTimeout(function(){
  1050. document.getElementById("myForm_"+divId).target ="myFrame_"+divId;
  1051. document.getElementById("data_"+divId).value = window.name;
  1052. document.getElementById("myForm_"+divId).submit();
  1053. },300);
  1054. }
  1055. }
  1056. fo.write(divId);
  1057. }
  1058. function changeWindowToNormalSceen(playerId) {
  1059. var containerId = playerId.replace("flashplayer_", "");
  1060. var containerObj = document.getElementById(containerId);
  1061. var obj = document.getElementById(playerId);
  1062. var originalStyle = "";
  1063. if(!containerObj || !obj) {
  1064. return "false";
  1065. }
  1066. if(obj.getAttribute("originalStyle") && obj.getAttribute("originalStyle").length>3) {
  1067. originalStyle = obj.getAttribute("originalStyle");
  1068. } else{
  1069. originalStyle = containerObj.getAttribute("style");
  1070. obj.setAttribute("originalStyle", originalStyle);
  1071. }
  1072. containerObj.style.cssText = originalStyle;
  1073. obj.setAttribute("isPageFullsreen", "false");
  1074. document.body.style.overflow = "visible";
  1075. if(typeof tellPageWhenNomalScreen !== "undefined") {
  1076. tellPageWhenNomalScreen(containerId);
  1077. }
  1078. return "true";
  1079. }
  1080. function changeWindowToWebFullSceen(playerId) {
  1081. var containerId = playerId.replace("flashplayer_", "");
  1082. var containerObj = document.getElementById(containerId);
  1083. var obj = document.getElementById(playerId);
  1084. var originalStyle = "";
  1085. if(!containerObj || !obj) {
  1086. return "false";
  1087. }
  1088. if(obj.getAttribute("originalStyle") && obj.getAttribute("originalStyle").length>3) {
  1089. originalStyle = obj.getAttribute("originalStyle");
  1090. containerObj.style.cssText = "";
  1091. } else{
  1092. originalStyle = containerObj.getAttribute("style");
  1093. obj.setAttribute("originalStyle", originalStyle);
  1094. }
  1095. containerObj.style.position = "fixed";
  1096. containerObj.style.zIndex = "999";
  1097. containerObj.style.top = "0px";
  1098. containerObj.style.left = "0px";
  1099. containerObj.style.bottom = "0px";
  1100. containerObj.style.width = "100%";
  1101. containerObj.style.height = "auto";
  1102. containerObj.style.maxHeight = "100%";
  1103. obj.setAttribute("isPageFullsreen", "true");
  1104. document.body.style.overflow = "hidden";
  1105. if(typeof tellPageWhenFullScreen !== "undefined") {
  1106. tellPageWhenFullScreen(containerId);
  1107. }
  1108. return "true";
  1109. }
  1110. function getObjStyle(obj,attr){
  1111. var v = "relative";
  1112. //针对IE
  1113. try{
  1114. if(obj.currentStyle){
  1115. v = obj.currentStyle[attr]; //ç”±äºŽå‡½æ•°ä¼ è¿‡æ¥çš„attr是字符串,所以得用[]来取值
  1116. }else{
  1117. //针对非IE
  1118. v = window.getComputedStyle(obj,false)[attr];
  1119. }
  1120. } catch (e) {
  1121. v = "relative";
  1122. }
  1123. return v;
  1124. }
  1125. function flashStartPlaying(playerId) {
  1126. var len = flashPlayerList.length;
  1127. for(var i=0; i<len; i++) {
  1128. if(flashPlayerList[i] === playerId) {
  1129. continue;
  1130. }
  1131. try{
  1132. thisMovie(flashPlayerList[i]).pause();
  1133. } catch (e){
  1134. try{
  1135. document.getElementById("html5Player-"+flashPlayerList[i].substr(12)).pause();
  1136. } catch (e){
  1137. }
  1138. }
  1139. }
  1140. }
  1141. function givePageUrlToFlash() {
  1142. return window.location.href;
  1143. }
  1144. function doLoadAliAnalyticsJs() {
  1145. var jsLoader = createElementByType("script","convivaJs237","absolute","0px","0px","0px","0px");
  1146. jsLoader.src = "https://js.data.cctv.com/__aplus_plugin_cctv.js,aplus_plugin_aplus_u.js";
  1147. var _doc = document.getElementsByTagName('head')[0];
  1148. _doc.appendChild(jsLoader);
  1149. }
  1150. function getFlashVer(){//获得flashplayer的版本 google
  1151. var fls=flashChecker();
  1152. var s="";
  1153. if(fls.f&&(fls.v>=33)) isFlashPlayer = true;
  1154. else isFlashPlayer = false;
  1155. }
  1156. function flashChecker()
  1157. {
  1158. var hasFlash=0; //是否安装了flash
  1159. var flashVersion=0; //flash版本
  1160. var isIE=/*@cc_on!@*/0; //是否IE浏览器
  1161. if(isIE)
  1162. {
  1163. try{
  1164. var swf = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');
  1165. if(swf) {
  1166. hasFlash=1;
  1167. VSwf=swf.GetVariable("$version");
  1168. flashVersion=parseInt(VSwf.split(" ")[1].split(",")[0]);
  1169. }
  1170. }catch(e)
  1171. {
  1172. //alert(e);
  1173. }
  1174. }else{
  1175. if (navigator.plugins && navigator.plugins.length > 0)
  1176. {
  1177. try{
  1178. var swf=navigator.plugins["Shockwave Flash"];
  1179. if (swf)
  1180. {
  1181. hasFlash=1;
  1182. var words = swf.description.split(" ");
  1183. for (var i = 0; i < words.length; ++i)
  1184. {
  1185. if (isNaN(parseInt(words[i]))) continue;
  1186. flashVersion = parseInt(words[i]);
  1187. if(!isIPad() && getChromeVersion()>=55 && flashVersion>=23 && swf.filename==="internal-not-yet-present"){
  1188. flashVersion = 22;
  1189. }
  1190. }
  1191. }
  1192. }catch(e){
  1193. //alert(e);
  1194. }
  1195. }
  1196. }
  1197. return {
  1198. f:hasFlash,
  1199. v:flashVersion
  1200. };
  1201. }
  1202. function showVodPlayerErrorMsg(paras) {
  1203. var retryErrorMsg = '对不起,视频未能成功播放,';
  1204. var pageUrl = location.href;
  1205. retryErrorMsg += '请点击<a href="' + pageUrl + '" style="font-size:18px;color:rgb(253,36,0)">刷新</a>页面,或稍后再试。';
  1206. showVodPlayerMsg(paras, retryErrorMsg);
  1207. }
  1208. function showVodPlayerMsg(paras, errorMsg, isCopyrightcheck) {
  1209. destroyH5VodHls(paras, isCopyrightcheck);
  1210. var container = document.getElementById(paras.divId);
  1211. if(document.getElementById("html5Player-"+paras.divId)) {
  1212. document.getElementById("html5Player-"+paras.divId).pause();
  1213. document.getElementById("html5Player-"+paras.divId).style.display = "none";
  1214. }
  1215. if(document.getElementById("h5canvas_"+paras.divId)) {
  1216. document.getElementById("h5canvas_"+paras.divId).style.display = "none";
  1217. }
  1218. if(isIPad() && document.getElementById("control_bar_"+paras.divId)) {
  1219. document.getElementById("control_bar_"+paras.divId).style.display = "none";
  1220. }
  1221. //20210329,如果不是fixed定位,强制relative定位
  1222. if(!container.style || typeof container.style!=="object" || container.style.position!=="fixed") {
  1223. container.style.position = "relative";
  1224. }
  1225. showVodPlayerBg(paras.divId);
  1226. var msgDiv = document.getElementById("error_msg_"+paras.divId);
  1227. if(!msgDiv) {
  1228. msgDiv = createElementByType("div", "error_msg_"+paras.divId, "absolute", "100%", "100%", "0", "0");
  1229. msgDiv.style.cssText = "position:absolute;width:100%;top:50%;color:#FFF;font-size:16px;word-break:break-all;font-family:PingFangSC-Regular,Helvetica,Arial,Microsoft Yahei,sans-serif;margin:0 auto;text-align:center;";
  1230. container.appendChild(msgDiv);
  1231. }
  1232. msgDiv.innerHTML = errorMsg;
  1233. if(document.getElementById("loading_"+paras.divId)) {
  1234. document.getElementById("loading_"+paras.divId).style.display = "none";
  1235. }
  1236. var playBtn = document.getElementById("play_or_pause_play_"+paras.divId);
  1237. if(playBtn) {
  1238. VodPlayOrPauseBtn.prototype.switchPlayOrPauseBtn(paras.divId, "pause");
  1239. }
  1240. }
  1241. function showVodPlayerBg(divId) {
  1242. var container = document.getElementById(divId);
  1243. //显示背景
  1244. //container.style.backgroundImage = "url('//t.live.cntv.cn/cntvwebplay/cntvplayer/images/plug-in_bg.gif')";
  1245. container.style.backgroundImage = "url('//player.cntv.cn/html5Player/images/20190905/cctv_bg.png')";
  1246. container.style.backgroundRepeat = "no-repeat";
  1247. container.style.backgroundPosition = "0px 0px";
  1248. container.style.backgroundSize = "100% 100%";
  1249. if(!document.getElementById("logo_" + divId)) {
  1250. //显示logo
  1251. var htmls = "";
  1252. var logoImg = "//player.cntv.cn/html5Player/images/20190905/cctv_logo.png";
  1253. //通过页面参数设置logo图片
  1254. if(vodPlayerObjs[divId].logoImg && vodPlayerObjs[divId].logoImg.length>5) {
  1255. logoImg = vodPlayerObjs[divId].logoImg;
  1256. logoImg = logoImg.replace("http://", "//");
  1257. }
  1258. if(location.href.indexOf("fromapp=cctvnews")>0) {
  1259. logoImg = "//player.cntv.cn/html5Player/images/20190905/cctv_logo.png";
  1260. }
  1261. if(typeof calledByApp !== "undefined") {
  1262. if(calledByApp === "cctvnews") {
  1263. logoImg = "//player.cntv.cn/html5Player/images/20190905/cctv_logo.png";
  1264. }
  1265. }
  1266. htmls = '<div id="logo_' + divId + '" style="position:absolute;top:20%;margin:0 auto;text-align:center;width:100%;height:15%;cursor:pointer;z-index:20;">';
  1267. htmls += '<img src="' + logoImg +'" style="width:auto;height:100%;display:inline-block;">';
  1268. htmls += '</div>';
  1269. //container.innerHTML += htmls;
  1270. try{
  1271. container.insertAdjacentHTML("afterBegin", htmls);
  1272. } catch (e) {
  1273. }
  1274. }
  1275. }
  1276. function showInstallFlashPlayerMsg(playerId, w, h) {
  1277. var msg = "请点此安装最新flash";
  1278. var str = "<div class=\"flash_install\"><a style='color:#cccccc;font-size:16px;text-decoration:underline;' href=\"https://www.flash.cn\" onfocus=\"this.blur()\"><img style=\"display:inline-block\" src=\"//player.cntv.cn/flashplayer/logo/get_adobe_flash_player.png\"/><p style='margin-top:8px;color:#cccccc'>" + msg + "</p></a></div>";
  1279. if(playerId=== "vplayer" && document.getElementById("myFlash") && !document.getElementById("vplayer"))
  1280. {
  1281. playerId = "myFlash";
  1282. }
  1283. var result_box = document.getElementById(playerId);
  1284. var bg = document.createElement("img");
  1285. bg.position = "absolute";
  1286. showVodPlayerBg(playerId);
  1287. var bgWidth = w;
  1288. var bgHeight = h;
  1289. bg.width = bgWidth;
  1290. bg.height = bgHeight;
  1291. result_box.style.lineHeight = "20px";
  1292. result_box.appendChild(bg);
  1293. var errorPanel = document.createElement("div");
  1294. errorPanel.style.position = "relative";
  1295. errorPanel.style.margin = "0 auto";
  1296. errorPanel.style.left = "0";
  1297. errorPanel.style.width = w + "px";
  1298. errorPanel.style.textAlign = "center";
  1299. errorPanel.style.top = -parseInt(2*bg.height/5) + "px";
  1300. errorPanel.style.color = "#dddddd";
  1301. errorPanel.style.fontSize = "16px";
  1302. errorPanel.style.fontWeight = "bold";
  1303. errorPanel.innerHTML = str;
  1304. errorPanel.align = "center";
  1305. result_box.appendChild(errorPanel);
  1306. return;
  1307. }
  1308. function getChromeVersion(){
  1309. var ver = "";
  1310. var start = navigator.userAgent.indexOf("Chrome/");
  1311. var cutStr = navigator.userAgent.substr(start + 7);
  1312. ver = parseInt(cutStr);
  1313. return ver;
  1314. }
  1315. function isVodDrmLegalDomainUrl(paras) {
  1316. var str = "";
  1317. var isInWhiteList = false;
  1318. if(paras.drm !== "true") {
  1319. return true;
  1320. }
  1321. try {
  1322. //正则获取二级域名
  1323. var _reg = /https?:\/\/(?:[^/]+\.)?([^./]+\.\w*.(?:cn|com|org))(?:$|\/)/;
  1324. //èŽ·å–æ ¹åŸŸå
  1325. // var _reg = /https?:\/\/(?:[^/]+\.)?([^./]+\w*.(?:cn|com|org))(?:$|\/)/;
  1326. var _url = window.location.href||self.location.href||document.URL||document.location;
  1327. _url = _url.toString().toLocaleLowerCase();
  1328. str = _reg.exec(_url);
  1329. if(!str){
  1330. var urlArr0 = _url.split("/");
  1331. if(urlArr0 && urlArr0.length>1) {
  1332. str = urlArr0[2];
  1333. } else{
  1334. return false;
  1335. }
  1336. } else {
  1337. str = str[1];
  1338. }
  1339. var whiteList = ["7G179P79P7A47A17G179P7A9", "7G179P79P7A47A17G179P7AA7AG", "7G179P7A97A47A17G179P7A9", "7AJ7AJ7AJ7G17927AY79W7A979H79W7G179P7AA7AG", "79R7A97G17927AY79W7A979H79W7G179P7AA7AG", "7A17G17A97AY79P7G179E7AA7A17G179P7A9", "7AJ7AJ7AJ7G179H7AA79P7A079P79T7927A979W7G179P7A9", "7AJ7AJ7AJ7G179P7A979H7937927A77AG7G179P7AA7AG", "7AJ7AJ7AJ7G17AK7AG7A47A17G179P7A9", "7AJ7AJ7AJ7G179P79T7A979P7AY79W7G17AA7AQ79E", "7AJ7AJ7AJ7G17A979P7AY79W7G079P7A779W7AU7AU79279P7G179P7AA7AG", "7AG7G17A979P7AY79W7G079P7A779W7AU7AU79279P7G179P7AA7AG", "79P7A779W7AU7AU79279P7G179P79T7A979P7AY79W7G17AA7AQ79E", "7G17G57GL7GM7GS7G57G179P7A9", "7AJ7AJ7AJ7G179P7AY7AY79P79P7G179E7AA7A17G179P7A9", "7AJ7AJ7AJ7G179E7AA7A17G179P7A9", "79W79H7AG7927A97G179P7AY7AA7AQ7A479W7A77G179P7A97A47A17927A97A479R7AQ7A979W7A77G179P7A9", "7G179E7AA7A17G179P7A9", "7G17927AY79W7A979H79W7G179P7AA7AG"];
  1340. whiteList.push("7G17AA7A77A57AG7AY79279P79P79T79W7A97A979R7A779P79T7927A979W7G179P7A9");
  1341. whiteList.push("7G17927AY79W7A979H79W7G179P7A9");
  1342. whiteList.push("7G179P7AU7AG7AY7A479R7G179P7AA7AG");
  1343. whiteList.push("7G179P79T7A979P7AY79W7G17AA7AQ79E");
  1344. //定义密钥,36个字母和数字
  1345. var key = "7G9AY8QU401JK5LMVBFSCX6DNWOPHR3ET2IZ";
  1346. var l = key.length; //获取密钥的长度
  1347. var a = key.split(""); //把密钥字符串转换为字符数组
  1348. var s = "",b, b1, b2, b3; //定义临时变量
  1349. for (var i = 0; i <str.length; i ++) { //遍历字符串
  1350. b = str.charCodeAt(i); //逐个提取每个字符,并获取Unicodeç¼–ç å€¼
  1351. b1 = b % l; //求Unicodeç¼–ç å€¼å¾—ä½™æ•°
  1352. b = (b - b1) / l; //求最大倍数
  1353. b2 = b % l; //求最大倍数的于是
  1354. b = (b - b2) / l; //求最大倍数
  1355. b3 = b % l; //求最大倍数的余数
  1356. s += a[b3] + a[b2] + a[b1]; //æ ¹æ®ä½™æ•°å€¼æ˜ å°„åˆ°å¯†é’¥ä¸­å¯¹åº”ä¸‹æ ‡ä½ç½®çš„å­—ç¬¦
  1357. }
  1358. for(i=0;i<whiteList.length;i++){
  1359. if(s.indexOf(whiteList[i])>=0){
  1360. isInWhiteList = true;
  1361. break;
  1362. }
  1363. }
  1364. if(window.top && window.self && window.top!=window.self) {
  1365. isInWhiteList = false;
  1366. var topFrameUrl = "";
  1367. if(window.top.frames && window.top.frames[0] && window.top.frames[0].document && window.top.frames[0].document.referrer) {
  1368. topFrameUrl = window.top.frames[0].document.referrer;
  1369. if(topFrameUrl) {
  1370. var urlArr = topFrameUrl.split("/");
  1371. var domainUrl = urlArr[2];
  1372. if(domainUrl==="yy.cms.cntv.cn") {
  1373. isInWhiteList = true;
  1374. }
  1375. }
  1376. }
  1377. }
  1378. } catch (e) {
  1379. }
  1380. return isInWhiteList;
  1381. }
  1382. function isIPad() {
  1383. return /(iphone|ipad)/i.test(navigator.userAgent) || /(Android)/i.test(navigator.userAgent);
  1384. }
  1385. function createElementByType(type,_id,position,_w,_h,_l,_t) {
  1386. var el = document.createElement(type);
  1387. el.setAttribute("id",_id);
  1388. el.style.position = position;
  1389. el.style.width = _w;
  1390. el.style.height = _h;
  1391. el.style.left = _l;
  1392. el.style.top = _t;
  1393. return el;
  1394. }
  1395. function IsMaxthon() {
  1396. try{
  1397. window.external.max_invoke("GetHotKey");
  1398. return true;
  1399. }catch(ex){
  1400. return false;
  1401. }
  1402. }
  1403. //鍔ㄦ€佸姞杞芥寚绾筳s鏂囦欢fingerprint2.js
  1404. function getVodfingerprint2(){
  1405. var _doc = document.getElementsByTagName("head")[0];
  1406. var jsLoader = createElementByType("script","jsFingerLoader","absolute","0px","0px","0px","0px");
  1407. if(vodPlayerObjs.isHttps) {
  1408. jsLoader.src = "https://js.player.cntv.cn/creator/fingerprint2.js";
  1409. } else{
  1410. jsLoader.src = "http://js.player.cntv.cn/creator/fingerprint2.js";
  1411. }
  1412. _doc.appendChild(jsLoader);
  1413. if(typeof jsLoader.onload != "undefined"){
  1414. jsLoader.onload = function() {
  1415. getFingerprint();
  1416. };
  1417. }
  1418. if(typeof jsLoader.onreadystatechange != "undefined"){
  1419. jsLoader.onreadystatechange = function(){
  1420. if (jsLoader.readyState == 'loaded' || jsLoader.readyState == 'complete'){
  1421. getFingerprint();
  1422. }
  1423. };
  1424. }
  1425. }
  1426. //璁剧疆cookie 2017骞�7鏈�28鏃�16:11:42
  1427. function setCookie_vdn(key,value,day){
  1428. if(day){
  1429. var d = new Date();
  1430. d.setTime(d.getTime() + day*24*60*60*1000);
  1431. document.cookie=key + "=" + value + ";expires=" + d.toGMTString();
  1432. }else{
  1433. document.cookie=key + "=" + value;
  1434. }
  1435. try{
  1436. if(window.localStorage) {
  1437. localStorage.setItem(key, value);
  1438. }
  1439. } catch (e) {
  1440. }
  1441. }
  1442. //鍒犻櫎cookie鏂规硶
  1443. function removeCookie_vdn(key) {
  1444. setCookie_vdn(key,"",-1);
  1445. }
  1446. //鑾峰彇cookie鏂规硶
  1447. function getCookie_vdn( key ) {
  1448. var v = "";
  1449. //鍒ゆ柇鏄惁鍚湁cookie 锛屾湁cookie çè¾«å¹é™æ §åš­é‰ï¿½
  1450. if( document.cookie ){
  1451. var str = document.cookie;//鑾峰彇cookie淇℃伅 閿�1=鍊�1; 閿�2=鍊�1; 閿�3=鍊�3;
  1452. var arr = str.split("; ");//灏哻ookie鏂囦欢鎸夌収 ; 鎷嗘垚鏁扮粍
  1453. for(var i = 0 ; i <arr.length ; i++){
  1454. var item = arr[i].split("=");// 灏嗘暟缁勪腑鐨勬瘡涓€涓瓧绗︿覆閫氳繃=鎷嗘垚涓€涓皬鏁扮粍 [閿�1,鍊�1]
  1455. //鍒ゆ柇灏忔暟缁勪腑 鏍规嵁宸茬煡鐨勯敭 涓嬫爣涓� [0] 涓哄凡鐭ラ敭锛屾壘鍒板搴旂殑鍊�
  1456. if(item[0] == key){
  1457. v = item[1].toString();//灏唊ey瀵瑰簲鐨勫€艰繑鍥炴澶勮繑鍥炵殑涓哄瓧绗︿覆 灏唕eturn JSON.parse(item[1])
  1458. break;
  1459. }
  1460. }
  1461. }
  1462. v += "";
  1463. try{
  1464. if((!v ||v.length<20) && window.localStorage) {
  1465. v = localStorage[key] ? localStorage[key] : "";
  1466. }
  1467. } catch (e) {
  1468. v = "";
  1469. }
  1470. //濡傛灉娌℃湁cookie 锛岃繑鍥炰竴涓┖鏁扮粍
  1471. return v;
  1472. }
  1473. //瀹氫箟鎸囩汗淇℃伅鍦╟ookieæ¶“î… æ®‘key鍊�
  1474. function getFingerprint() {
  1475. var fp = new Fingerprint2();
  1476. fp.get(function(result) {
  1477. setCookie_vdn("Fingerprint",result.toUpperCase(),7);
  1478. });
  1479. }
  1480. if(window.addEventListener) {
  1481. window.addEventListener("beforeunload", function (e) {
  1482. var len = flashPlayerList.length;
  1483. for(var i=0; i<len; i++) {
  1484. try{
  1485. thisMovie(flashPlayerList[i]).ConvivaCleanUp();
  1486. window.name = currentMessage;
  1487. if(typeof sns_islogin !== "undefined" && sns_islogin=="true") {
  1488. var divId = flashPlayerList[i].replace("flashplayer_", "");
  1489. if(document.getElementById("myForm_"+divId)) {
  1490. document.getElementById("myForm_"+divId).target ="myFrame_" + divId;
  1491. document.getElementById("data_"+divId).value = currentMessage;
  1492. document.getElementById("myForm_"+divId).submit();
  1493. }
  1494. }
  1495. } catch (e){
  1496. }
  1497. }
  1498. if(typeof(_vjVideoTrack)!="undefined") {
  1499. _vjVideoTrack("");
  1500. }
  1501. window.name = currentMessage;
  1502. });
  1503. }
  1504. function setCurrentMes(s) {
  1505. currentMessage =s;
  1506. }
  1507. function getAndroidVersion() {
  1508. var version = 0;
  1509. var clientInfo = navigator.userAgent.toLowerCase();
  1510. var pos = clientInfo.indexOf("android");
  1511. if(pos > 0)
  1512. {
  1513. version = clientInfo.substr(pos+7);
  1514. version = parseInt(version);
  1515. }
  1516. return version;
  1517. }
  1518. function thisMovie(movieName) {
  1519. if (navigator.appName.indexOf("Microsoft") != -1) {
  1520. return window[movieName];
  1521. } else {
  1522. return document[movieName];
  1523. }
  1524. }
  1525. var clientInfo={os:null,browser:null,broserVersion:null,osVersion:null};
  1526. (function() {
  1527. var BrowserDetect = {
  1528. init: function () {
  1529. this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
  1530. this.version = this.searchVersion(navigator.userAgent)
  1531. || this.searchVersion(navigator.appVersion)
  1532. || "an unknown version";
  1533. this.OS = this.searchString(this.dataOS) || "an unknown OS";
  1534. },
  1535. searchString: function (data) {
  1536. for (var i=0;i<data.length;i++) {
  1537. var dataString = data[i].string;
  1538. var dataProp = data[i].prop;
  1539. this.versionSearchString = data[i].versionSearch || data[i].identity;
  1540. if (dataString) {
  1541. if (dataString.indexOf(data[i].subString) != -1)
  1542. return data[i].identity;
  1543. }
  1544. else if (dataProp)
  1545. return data[i].identity;
  1546. }
  1547. },
  1548. searchVersion: function (dataString) {
  1549. var index = dataString.indexOf(this.versionSearchString);
  1550. if (index == -1) return;
  1551. return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
  1552. },
  1553. dataBrowser: [
  1554. {
  1555. string: navigator.userAgent,
  1556. subString: "Chrome",
  1557. identity: "Chrome"
  1558. },
  1559. { string: navigator.userAgent,
  1560. subString: "OmniWeb",
  1561. versionSearch: "OmniWeb/",
  1562. identity: "OmniWeb"
  1563. },
  1564. {
  1565. string: navigator.vendor,
  1566. subString: "Apple",
  1567. identity: "Safari",
  1568. versionSearch: "Version"
  1569. },
  1570. {
  1571. prop: window.opera,
  1572. identity: "Opera"
  1573. },
  1574. {
  1575. string: navigator.vendor,
  1576. subString: "iCab",
  1577. identity: "iCab"
  1578. },
  1579. {
  1580. string: navigator.vendor,
  1581. subString: "KDE",
  1582. identity: "Konqueror"
  1583. },
  1584. {
  1585. string: navigator.userAgent,
  1586. subString: "Firefox",
  1587. identity: "Firefox"
  1588. },
  1589. {
  1590. string: navigator.vendor,
  1591. subString: "Camino",
  1592. identity: "Camino"
  1593. },
  1594. { // for newer Netscapes (6+)
  1595. string: navigator.userAgent,
  1596. subString: "Netscape",
  1597. identity: "Netscape"
  1598. },
  1599. {
  1600. string: navigator.userAgent,
  1601. subString: "MSIE",
  1602. identity: "Explorer",
  1603. versionSearch: "MSIE"
  1604. },
  1605. {
  1606. string: navigator.userAgent,
  1607. subString: "Gecko",
  1608. identity: "Mozilla",
  1609. versionSearch: "rv"
  1610. },
  1611. { // for older Netscapes (4-)
  1612. string: navigator.userAgent,
  1613. subString: "Mozilla",
  1614. identity: "Netscape",
  1615. versionSearch: "Mozilla"
  1616. }
  1617. ],
  1618. dataOS : [
  1619. {
  1620. string: navigator.platform,
  1621. subString: "Win",
  1622. identity: "Windows"
  1623. },
  1624. {
  1625. string: navigator.platform,
  1626. subString: "Mac",
  1627. identity: "Mac"
  1628. },
  1629. {
  1630. string: navigator.userAgent,
  1631. subString: "iPhone",
  1632. identity: "iPhone/iPod"
  1633. },
  1634. {
  1635. string: navigator.userAgent,
  1636. subString: "iPad",
  1637. identity: "iPad"
  1638. },
  1639. {
  1640. string: navigator.platform,
  1641. subString: "Linux",
  1642. identity: "Linux"
  1643. }
  1644. ]
  1645. };
  1646. BrowserDetect.init();
  1647. clientInfo.os = BrowserDetect.OS;
  1648. clientInfo.browser = BrowserDetect.browser;
  1649. clientInfo.broserVersion = BrowserDetect.version;
  1650. })();
  1651. //md5åŠ å¯†
  1652. !function(a){"use strict";function b(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}function c(a,b){return a<<b|a>>>32-b}function d(a,d,e,f,g,h){return b(c(b(b(d,a),b(f,h)),g),e)}function e(a,b,c,e,f,g,h){return d(b&c|~b&e,a,b,f,g,h)}function f(a,b,c,e,f,g,h){return d(b&e|c&~e,a,b,f,g,h)}function g(a,b,c,e,f,g,h){return d(b^c^e,a,b,f,g,h)}function h(a,b,c,e,f,g,h){return d(c^(b|~e),a,b,f,g,h)}function i(a,c){a[c>>5]|=128<<c%32,a[(c+64>>>9<<4)+14]=c;var d,i,j,k,l,m=1732584193,n=-271733879,o=-1732584194,p=271733878;for(d=0;d<a.length;d+=16)i=m,j=n,k=o,l=p,m=e(m,n,o,p,a[d],7,-680876936),p=e(p,m,n,o,a[d+1],12,-389564586),o=e(o,p,m,n,a[d+2],17,606105819),n=e(n,o,p,m,a[d+3],22,-1044525330),m=e(m,n,o,p,a[d+4],7,-176418897),p=e(p,m,n,o,a[d+5],12,1200080426),o=e(o,p,m,n,a[d+6],17,-1473231341),n=e(n,o,p,m,a[d+7],22,-45705983),m=e(m,n,o,p,a[d+8],7,1770035416),p=e(p,m,n,o,a[d+9],12,-1958414417),o=e(o,p,m,n,a[d+10],17,-42063),n=e(n,o,p,m,a[d+11],22,-1990404162),m=e(m,n,o,p,a[d+12],7,1804603682),p=e(p,m,n,o,a[d+13],12,-40341101),o=e(o,p,m,n,a[d+14],17,-1502002290),n=e(n,o,p,m,a[d+15],22,1236535329),m=f(m,n,o,p,a[d+1],5,-165796510),p=f(p,m,n,o,a[d+6],9,-1069501632),o=f(o,p,m,n,a[d+11],14,643717713),n=f(n,o,p,m,a[d],20,-373897302),m=f(m,n,o,p,a[d+5],5,-701558691),p=f(p,m,n,o,a[d+10],9,38016083),o=f(o,p,m,n,a[d+15],14,-660478335),n=f(n,o,p,m,a[d+4],20,-405537848),m=f(m,n,o,p,a[d+9],5,568446438),p=f(p,m,n,o,a[d+14],9,-1019803690),o=f(o,p,m,n,a[d+3],14,-187363961),n=f(n,o,p,m,a[d+8],20,1163531501),m=f(m,n,o,p,a[d+13],5,-1444681467),p=f(p,m,n,o,a[d+2],9,-51403784),o=f(o,p,m,n,a[d+7],14,1735328473),n=f(n,o,p,m,a[d+12],20,-1926607734),m=g(m,n,o,p,a[d+5],4,-378558),p=g(p,m,n,o,a[d+8],11,-2022574463),o=g(o,p,m,n,a[d+11],16,1839030562),n=g(n,o,p,m,a[d+14],23,-35309556),m=g(m,n,o,p,a[d+1],4,-1530992060),p=g(p,m,n,o,a[d+4],11,1272893353),o=g(o,p,m,n,a[d+7],16,-155497632),n=g(n,o,p,m,a[d+10],23,-1094730640),m=g(m,n,o,p,a[d+13],4,681279174),p=g(p,m,n,o,a[d],11,-358537222),o=g(o,p,m,n,a[d+3],16,-722521979),n=g(n,o,p,m,a[d+6],23,76029189),m=g(m,n,o,p,a[d+9],4,-640364487),p=g(p,m,n,o,a[d+12],11,-421815835),o=g(o,p,m,n,a[d+15],16,530742520),n=g(n,o,p,m,a[d+2],23,-995338651),m=h(m,n,o,p,a[d],6,-198630844),p=h(p,m,n,o,a[d+7],10,1126891415),o=h(o,p,m,n,a[d+14],15,-1416354905),n=h(n,o,p,m,a[d+5],21,-57434055),m=h(m,n,o,p,a[d+12],6,1700485571),p=h(p,m,n,o,a[d+3],10,-1894986606),o=h(o,p,m,n,a[d+10],15,-1051523),n=h(n,o,p,m,a[d+1],21,-2054922799),m=h(m,n,o,p,a[d+8],6,1873313359),p=h(p,m,n,o,a[d+15],10,-30611744),o=h(o,p,m,n,a[d+6],15,-1560198380),n=h(n,o,p,m,a[d+13],21,1309151649),m=h(m,n,o,p,a[d+4],6,-145523070),p=h(p,m,n,o,a[d+11],10,-1120210379),o=h(o,p,m,n,a[d+2],15,718787259),n=h(n,o,p,m,a[d+9],21,-343485551),m=b(m,i),n=b(n,j),o=b(o,k),p=b(p,l);return[m,n,o,p]}function j(a){var b,c="";for(b=0;b<32*a.length;b+=8)c+=String.fromCharCode(a[b>>5]>>>b%32&255);return c}function k(a){var b,c=[];for(c[(a.length>>2)-1]=void 0,b=0;b<c.length;b+=1)c[b]=0;for(b=0;b<8*a.length;b+=8)c[b>>5]|=(255&a.charCodeAt(b/8))<<b%32;return c}function l(a){return j(i(k(a),8*a.length))}function m(a,b){var c,d,e=k(a),f=[],g=[];for(f[15]=g[15]=void 0,e.length>16&&(e=i(e,8*a.length)),c=0;16>c;c+=1)f[c]=909522486^e[c],g[c]=1549556828^e[c];return d=i(f.concat(k(b)),512+8*b.length),j(i(g.concat(d),640))}function n(a){var b,c,d="0123456789abcdef",e="";for(c=0;c<a.length;c+=1)b=a.charCodeAt(c),e+=d.charAt(b>>>4&15)+d.charAt(15&b);return e}function o(a){return unescape(encodeURIComponent(a))}function p(a){return l(o(a))}function q(a){return n(p(a))}function r(a,b){return m(o(a),o(b))}function s(a,b){return n(r(a,b))}function t(a,b,c){return b?c?r(b,a):s(b,a):c?p(a):q(a)}"function"==typeof define&&define.amd?define(function(){return t}):a.md5=t}(this);
  1653. LazyLoad=(function(doc){var env,head,pending={},pollCount=0,queue={css:[],js:[]},styleSheets=doc.styleSheets;function createNode(name,attrs){var node=doc.createElement(name),attr;for(attr in attrs){if(attrs.hasOwnProperty(attr)){node.setAttribute(attr,attrs[attr])}}return node}function finish(type){var p=pending[type],callback,urls;if(p){callback=p.callback;urls=p.urls;urls.shift();pollCount=0;if(!urls.length){callback&&callback.call(p.context,p.obj);pending[type]=null;queue[type].length&&load(type)}}}function getEnv(){var ua=navigator.userAgent;env={async:doc.createElement('script').async===true};(env.webkit=/AppleWebKit\//.test(ua))||(env.ie=/MSIE|Trident/.test(ua))||(env.opera=/Opera/.test(ua))||(env.gecko=/Gecko\//.test(ua))||(env.unknown=true)}function load(type,urls,callback,obj,context){var _finish=function(){finish(type)},isCSS=type==='css',nodes=[],i,len,node,p,pendingUrls,url;env||getEnv();if(urls){urls=typeof urls==='string'?[urls]:urls.concat();if(isCSS||env.async||env.gecko||env.opera){queue[type].push({urls:urls,callback:callback,obj:obj,context:context})}else{for(i=0,len=urls.length;i<len;++i){queue[type].push({urls:[urls[i]],callback:i===len-1?callback:null,obj:obj,context:context})}}}if(pending[type]||!(p=pending[type]=queue[type].shift())){return}head||(head=doc.head||doc.getElementsByTagName('head')[0]);pendingUrls=p.urls.concat();for(i=0,len=pendingUrls.length;i<len;++i){url=pendingUrls[i];if(isCSS){node=env.gecko?createNode('style'):createNode('link',{href:url,rel:'stylesheet'})}else{node=createNode('script',{src:url});node.async=false}node.className='lazyload';node.setAttribute('charset','utf-8');if(env.ie&&!isCSS&&'onreadystatechange'in node&&!('draggable'in node)){node.onreadystatechange=function(){if(/loaded|complete/.test(node.readyState)){node.onreadystatechange=null;_finish()}}}else if(isCSS&&(env.gecko||env.webkit)){if(env.webkit){p.urls[i]=node.href;pollWebKit()}else{node.innerHTML='@import "'+url+'";';pollGecko(node)}}else{node.onload=node.onerror=_finish}nodes.push(node)}for(i=0,len=nodes.length;i<len;++i){head.appendChild(nodes[i])}}function pollGecko(node){var hasRules;try{hasRules=!!node.sheet.cssRules}catch(ex){pollCount+=1;if(pollCount<200){setTimeout(function(){pollGecko(node)},50)}else{hasRules&&finish('css')}return}finish('css')}function pollWebKit(){var css=pending.css,i;if(css){i=styleSheets.length;while(--i>=0){if(styleSheets[i].href===css.urls[0]){finish('css');break}}pollCount+=1;if(css){if(pollCount<200){setTimeout(pollWebKit,50)}else{finish('css')}}}}return{css:function(urls,callback,obj,context){load('css',urls,callback,obj,context)},js:function(urls,callback,obj,context){load('js',urls,callback,obj,context)}}})(this.document);