base.common_v1.0.0.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674
  1. /**
  2. * 公用JS库
  3. * @time 20190731
  4. * @name test
  5. */
  6. if (typeof debug_mode === 'undefined') window.debug_mode = false; // 默认关闭调试模式
  7. if (typeof enable_animate === 'undefined') window.enable_animate = false; // 默认关闭动画
  8. if (typeof is_ott === 'undefined') window.is_ott = true; // 默认apk项目
  9. /**
  10. * 一些常用键值
  11. */
  12. var KEY_BACK = 0x0008; // 返回/删除
  13. var KEY_EXIT = 27; // 退出
  14. var KEY_ENTER = 0x000D; // 确定
  15. var KEY_PAGE_UP = 0x0021; // 上页
  16. var KEY_PAGE_DOWN = 0x0022; // 下页
  17. var KEY_LEFT = 0x0025; // 左
  18. var KEY_UP = 0x0026; // 上
  19. var KEY_RIGHT = 0x0027; // 右
  20. var KEY_DOWN = 0x0028; // 下
  21. var KEY_0 = 0x0030; // 0
  22. var KEY_1 = 0x0031; // 1
  23. var KEY_2 = 0x0032; // 2
  24. var KEY_3 = 0x0033; // 3
  25. var KEY_4 = 0x0034; // 4
  26. var KEY_5 = 0x0035; // 5
  27. var KEY_6 = 0x0036; // 6
  28. var KEY_7 = 0x0037; // 7
  29. var KEY_8 = 0x0038; // 8
  30. var KEY_9 = 0x0039; // 9
  31. var KEY_VOL_UP = 0x0103; // 音量加
  32. var KEY_VOL_DOWN = 0x0104; // 音量减
  33. var KEY_MUTE = 0x0105; // 静音
  34. var KEY_TRACK = 0x0106; // 切换音轨
  35. var KEY_PLAY_PAUSE = 0x0107; // 播放/暂停
  36. var KEY_FAST_FORWARD = 0x0108; // 快进
  37. var KEY_FAST_REWIND = 0x0109; // 快退
  38. var KEY_IPTV_EVENT = 0x0300; // 虚拟事件按键
  39. var KEY_RED = 0x0113; // 红色键
  40. var KEY_GREEN = 0x0114; // 绿色键
  41. var KEY_YELLOW = 0x0115; // 黄色键
  42. var KEY_BLUE = 0x0116; // 蓝色键
  43. var KEY_DELETE = 0x0118; // 删除键
  44. var EVENT_MEDIA_END = 'EVENT_MEDIA_END'; //视频播放结束
  45. var EVENT_MEDIA_ERROR = 'EVENT_MEDIA_ERROR'; //视频播放错误
  46. /*湖南特殊键值*/
  47. var KEY_HN_BACK = 'BACK';
  48. var KEY_HN_LEFT = 'LEFT';
  49. var KEY_HN_UP = 'UP';
  50. var KEY_HN_RIGHT = 'RIGHT';
  51. var KEY_HN_DOWN = 'DOWN';
  52. var KEY_HN_ENTER = 'ENTER';
  53. var KEY_HN_0 = 0; // 0
  54. var KEY_HN_1 = 1; // 1
  55. var KEY_HN_2 = 2; // 2
  56. var KEY_HN_3 = 3; // 3
  57. var KEY_HN_4 = 4; // 4
  58. var KEY_HN_5 = 5; // 5
  59. var KEY_HN_6 = 6; // 6
  60. var KEY_HN_7 = 7; // 7
  61. var KEY_HN_8 = 8; // 8
  62. var KEY_HN_9 = 9; // 9
  63. function Animator(duration, progress) {
  64. this.duration = duration;
  65. this.progress = progress;
  66. this.next = true;
  67. }
  68. Animator.prototype = {
  69. constructor: Animator,
  70. start: function(finished) {
  71. var startTime = new Date().getTime();
  72. var duration = this.duration, self = this, timeOut = 0;
  73. var vendors = ["webkit", "moz"];
  74. for(var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i){
  75. window.requestAnimationFrame = window[vendors[i] + "RequestAnimationFrame"];
  76. }
  77. if (!window.requestAnimationFrame) {
  78. window.requestAnimationFrame = function (callback, element) {
  79. var start = 0, finish = 0;
  80. window.setTimeout(function () {
  81. start = +new Date();
  82. callback(start);
  83. finish = +new Date();
  84. timeOut = 1000 / 300 - (finish - start);
  85. }, timeOut);
  86. };
  87. }
  88. window.requestAnimationFrame(function step(){
  89. var p = (new Date().getTime() - startTime) / duration;
  90. self.progress(p, p);
  91. if(p >= 1.0){
  92. self.progress(1.0, 1.0);
  93. self.next = false;
  94. finished();
  95. }
  96. if(self.next) window.requestAnimationFrame(step);
  97. });
  98. },
  99. stop: function() {
  100. this.next = false;
  101. }
  102. }
  103. /**
  104. * 公司自己的返回监听,一定要
  105. */
  106. window.onBackEvent=function(){
  107. back();
  108. }
  109. /**
  110. * 根据ID获取某个元素
  111. */
  112. function G(id) {
  113. return document.getElementById(id);
  114. }
  115. /**
  116. * 显示一个元素
  117. */
  118. function S(id) {
  119. var temp = G(id);
  120. if (temp) temp.style.visibility = 'visible';
  121. }
  122. /**
  123. * 隐藏一个元素
  124. */
  125. function H(id) {
  126. var temp = G(id);
  127. if (temp) temp.style.visibility = 'hidden';
  128. }
  129. /**
  130. * 返回IPTV门户或者apk来源地址
  131. */
  132. function goIptvPortal() {
  133. window.location.href = Authentication.CTCGetConfig('EPGDomain');
  134. }
  135. /**
  136. * 定义一个命名空间
  137. */
  138. var PageH5 = {
  139. /** 回调函数 */
  140. call: function(fn, args) {
  141. if (typeof fn === 'string' && fn) return eval('(' + fn + ')');
  142. else if (typeof fn === 'function') {
  143. if (! (args instanceof Array)) {
  144. var temp = [];
  145. for (var i = 1; i < arguments.length; i++) temp.push(arguments[i]);
  146. args = temp;
  147. }
  148. return fn.apply(window, args);
  149. }
  150. },
  151. /** 得到上下文路径 */
  152. getContextPath: function() {
  153. return '/' + location.href.split('/')[3] + '/';
  154. },
  155. /** 得到当前窗口的父窗口 */
  156. getParent: function() {
  157. return window == window.parent ? window.top: window.parent;
  158. },
  159. /** 异步调用方法 */
  160. myAjax: function(config) {
  161. var url = config.url;
  162. var data = config.data;
  163. var type = (config.type || 'GET').toUpperCase();
  164. var contentType = config.contentType || 'application/x-www-form-urlencoded';
  165. var dataType = config.dataType;
  166. var headers = config.headers || [];
  167. var fnSuccess = config.success;
  168. var fnError = config.error;
  169. var xmlhttp;
  170. if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest();
  171. else xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  172. xmlhttp.onreadystatechange = function() {
  173. if (xmlhttp.readyState == 4) {
  174. var rsp = xmlhttp.responseText || xmlhttp.responseXML;
  175. if (dataType == 'json') rsp = eval("(" + rsp + ")");
  176. if ((xmlhttp.status >= 200 && xmlhttp.status < 300) || xmlhttp.status == 304) PageH5.call(fnSuccess, [xmlhttp, rsp]);
  177. else PageH5.call(fnError, [xmlhttp, rsp]);
  178. }
  179. };
  180. xmlhttp.open(type, url, true);
  181. for (var i = 0; i < headers.length; ++i) {
  182. xmlhttp.setRequestHeader(headers[i].name, headers[i].value);
  183. }
  184. xmlhttp.setRequestHeader('Content-Type', contentType);
  185. if (typeof data == 'object' && contentType == 'application/x-www-form-urlencoded') {
  186. var s = '';
  187. for (attr in data) {
  188. s += attr + '=' + data[attr] + '&';
  189. }
  190. if (s) {
  191. s = s.substring(0, s.length - 1);
  192. }
  193. xmlhttp.send(s);
  194. } else xmlhttp.send(data);
  195. }
  196. };
  197. /** 按钮对象 */
  198. PageH5.Button = PageH5.btn = {
  199. _buttonStore: {},
  200. config: {
  201. defaultButtonId: '',
  202. buttons: [],
  203. imagePath: '',
  204. initKeys: true,
  205. eager: false
  206. },
  207. /** 初始化 */
  208. init: function(defaultButtonId, buttons, imagePath, initKeys, eager) {
  209. var config = defaultButtonId;
  210. if (arguments.length >= 2) {
  211. config = {
  212. defaultButtonId: defaultButtonId,
  213. buttons: buttons,
  214. imagePath: imagePath,
  215. initKeys: initKeys,
  216. eager: eager
  217. };
  218. }
  219. for (var i in config) this.config[i] = config[i];
  220. config = this.config;
  221. if (config.initKeys) {
  222. PageH5.key.init();
  223. PageH5.key.set({
  224. KEY_ENTER: 'PageH5.Button.click()',
  225. KEY_LEFT: 'PageH5.Button.move("left")',
  226. KEY_RIGHT: 'PageH5.Button.move("right")',
  227. KEY_UP: 'PageH5.Button.move("up")',
  228. KEY_DOWN: 'PageH5.Button.move("down")',
  229. KEY_BACK: 'back()',
  230. KEY_EXIT: 'back()'
  231. });
  232. }
  233. this.previous = null,
  234. this._buttonStore = {};
  235. for (var i = 0; i < config.buttons.length; i++) {
  236. var button = config.buttons[i];
  237. var _button = G(button.id);
  238. if (!button) continue;
  239. button.focusClass = (button.focusClass && !/^btn_focus_.*$/g.test(button.focusClass) ? 'btn_focus_': '') + button.focusClass;
  240. if (!button.linkImage && _button) button.linkImage = _button.src;
  241. if (config.imagePath && button.focusImage && button.autoPrefix !== false && button.focusImage.indexOf('http') < 0) button.focusImage = config.imagePath + button.focusImage;
  242. if (config.imagePath && button.linkImage && button.autoPrefix !== false && button.linkImage.indexOf('http') < 0) button.linkImage = config.imagePath + button.linkImage;
  243. if (config.animate === false) button.animate = false;
  244. this._buttonStore[button.id] = button;
  245. if ((button.eager || config.eager) && button.focusImage) new Image().src = button.focusImage;
  246. }
  247. if (typeof config.defaultButtonId === 'string') this.current = this.get(config.defaultButtonId);
  248. else if (config.defaultButtonId instanceof Array) {
  249. for (var i = 0,
  250. max = config.defaultButtonId.length; i < max; i++) {
  251. var button = this.get(config.defaultButtonId[i]);
  252. if (button) {
  253. this.current = button;
  254. break;
  255. }
  256. }
  257. }
  258. this.update();
  259. },
  260. get: function(id) {
  261. if (id === undefined) id = this.current.id;
  262. if (G(id)) {
  263. var btn = this._buttonStore[id];
  264. if (btn && btn.disable !== true) return this._buttonStore[id];
  265. }
  266. },
  267. move: function(dir) {
  268. this._dir = dir;
  269. if (this.current.beforeMove && PageH5.call(this.current.beforeMove, [dir, this.current]) === false) return;
  270. var button;
  271. var nextButtonId = this.current[dir];
  272. if (typeof nextButtonId == "string") nextButtonId = [nextButtonId];
  273. if (nextButtonId instanceof Array) {
  274. for (var i = 0; i < nextButtonId.length; i++) {
  275. button = this.get(nextButtonId[i]);
  276. if (button) break;
  277. }
  278. this.previous = this.current;
  279. if (button) {
  280. this.current = button;
  281. if (button.scrollDir === "x") {
  282. PageH5.scroll.repair();
  283. this.update();
  284. PageH5.scroll.check(button, dir);
  285. } else {
  286. PageH5.scrollScreen.repair();
  287. this.update();
  288. PageH5.scrollScreen.check(button, dir);
  289. }
  290. }
  291. }
  292. PageH5.call(this.current.moveHandler, [this.previous, this.current, dir]);
  293. },
  294. set: function(buttonId) {
  295. var btn = this.get(buttonId);
  296. if (!btn) return;
  297. this.previous = this.current;
  298. this.current = btn;
  299. this.update();
  300. },
  301. click: function(interceptor, btnId) {
  302. if (btnId && btnId !== this.current.id) this.set(btnId);
  303. PageH5.call(interceptor, [this.current]);
  304. PageH5.call(this.current.action, [this.current]);
  305. },
  306. update: function() {
  307. var prev = this.previous;
  308. var current = this.current;
  309. if (prev && G(prev.id)) {
  310. var _prev = G(prev.id);
  311. if (prev.focusClass) PageH5.removeClass(_prev, prev.focusClass);
  312. if (prev.linkImage) _prev.src = prev.linkImage;
  313. if (prev.twinkle) PageH5.twinkle.stop();
  314. if (enable_animate && prev.zoom) {
  315. var parent = _prev.parentNode;
  316. var defaultScale = prev.defaultScale || 1;
  317. parent.style.webkitTransition = '';
  318. parent.style.transition = '';
  319. parent.style.webkitTransform = 'scale(' + defaultScale + ')';
  320. parent.style.transform = 'scale(' + defaultScale + ')';
  321. parent.style.zIndex = '';
  322. }
  323. PageH5.call(prev.blurHandler, [prev]);
  324. }
  325. if (current) {
  326. var _current = G(current.id);
  327. if (current.focusClass) PageH5.addClass(_current, current.focusClass);
  328. if (current.focusImage) _current.src = current.focusImage;
  329. if (prev && enable_animate !== false && prev.animate && current.animate && prev.animateGroup === current.animateGroup) {
  330. var pImg = G(prev.id);
  331. var cImg = G(current.id);
  332. var p = pImg.parentNode;
  333. var c = cImg.parentNode;
  334. PageH5.Button._zIndex = c.style.zIndex;
  335. c.style.zIndex = 200;
  336. if (this.config.animateType === 'js') {
  337. PageH5.animate(c, {
  338. left: [PageH5.css(p, 'left'), PageH5.css(c, 'left')],
  339. top: [PageH5.css(p, 'top'), PageH5.css(c, 'top')]
  340. },
  341. 'fast',
  342. function() {
  343. c.style.zIndex = PageH5.Button._zIndex;
  344. PageH5.Button._zIndex = undefined;
  345. if (PageH5.btn.current.twinkle) PageH5.twinkle.start(PageH5.btn.current.id, PageH5.btn.current.twinkle);
  346. });
  347. PageH5.animate(cImg, {
  348. width: [PageH5.css(pImg, 'width'), PageH5.css(cImg, 'width')],
  349. height: [PageH5.css(pImg, 'height'), PageH5.css(cImg, 'height')]
  350. },
  351. 'fast',
  352. function() {},
  353. 'default2');
  354. } else if (this.config.animateType === 'css3') {
  355. var _left = PageH5.css(c, 'left'),
  356. _top = PageH5.css(c, 'top'),
  357. _width = PageH5.css(cImg, 'width'),
  358. _height = PageH5.css(cImg, 'height');
  359. PageH5.css(c, 'webkitTransition', '');
  360. PageH5.css(c, 'transition', '');
  361. PageH5.css(c, 'left', PageH5.css(p, 'left'));
  362. PageH5.css(c, 'top', PageH5.css(p, 'top'));
  363. PageH5.css(cImg, 'width', PageH5.css(pImg, 'width'));
  364. PageH5.css(cImg, 'height', PageH5.css(pImg, 'height'));
  365. setTimeout(function() {
  366. PageH5.css(c, 'webkitTransition', 'all 0.2s');
  367. PageH5.css(c, 'transition', 'all 0.2s');
  368. PageH5.css(c, 'left', _left);
  369. PageH5.css(c, 'top', _top);
  370. PageH5.css(c, 'width', _width);
  371. PageH5.css(c, 'height', _height);
  372. },
  373. 20);
  374. PageH5.one(c, 'webkitTransitionEnd mozTransitionEnd MSTransitionEnd otransitionend transitionend',
  375. function() {
  376. c.style.zIndex = PageH5.Button._zIndex;
  377. PageH5.Button._zIndex = undefined;
  378. if (PageH5.btn.current.twinkle) PageH5.twinkle.start(PageH5.btn.current.id, PageH5.btn.current.twinkle);
  379. });
  380. }
  381. } else {
  382. if (current.twinkle) PageH5.twinkle.start(current.id, current.twinkle);
  383. if (enable_animate && current.zoom) {
  384. var parent = G(current.id).parentNode;
  385. var zoomScale = current.zoomScale || 1.2;
  386. parent.style.zIndex = '200';
  387. parent.style.webkitTransition = 'all 0.5s';
  388. parent.style.transition = 'all 0.5s';
  389. parent.style.webkitTransform = 'scale(' + zoomScale + ')';
  390. parent.style.transform = 'scale(' + zoomScale + ')';
  391. }
  392. }
  393. PageH5.call(current.focusHandler, [current]);
  394. }
  395. }
  396. };
  397. /** apk 可 注入一个叫mp的对象 */
  398. var mp;
  399. /** 播放器 */
  400. PageH5.Mp = PageH5.mp = {
  401. speed: 1,
  402. state: 'play',
  403. muteFlag: 0,
  404. defaultTip: false,
  405. init: function(defaultTip) {
  406. try {
  407. this.defaultTip = defaultTip;
  408. if (!is_ott) {
  409. mp = new MediaPlayer();
  410. var instanceId = mp.getNativePlayerInstanceID();
  411. var playListFlag = 0;
  412. var videoDisplayMode = 1;
  413. var height = 100;
  414. var width = 100;
  415. var left = 50;
  416. var top = 50;
  417. var muteFlag = 0;
  418. var useNativeUIFlag = 1;
  419. var subtitleFlag = 0;
  420. var videoAlpha = 0;
  421. var cycleFlag = 1;
  422. var randomFlag = 0;
  423. var autoDelFlag = 0;
  424. mp.initMediaPlayer(instanceId, playListFlag, videoDisplayMode, height, width, left, top, muteFlag, useNativeUIFlag, subtitleFlag, videoAlpha, cycleFlag, randomFlag, autoDelFlag);
  425. mp.setAllowTrickmodeFlag(0);
  426. }
  427. mp.setProgressBarUIFlag(0);
  428. mp.setAudioVolumeUIFlag(1);
  429. } catch(e) {}
  430. },
  431. pause: function(callback) {
  432. this.speed = 1;
  433. this.state = 'pause';
  434. try {
  435. mp.pause();
  436. } catch(e) {}
  437. PageH5.call(callback, [this]);
  438. },
  439. resume: function(callback) {
  440. this.speed = 1;
  441. this.state = 'play';
  442. try {
  443. mp.resume();
  444. } catch(e) {}
  445. PageH5.call(callback, [this]);
  446. },
  447. playOrPause: function(callback) {
  448. if (this.state == 'play') this.pause();
  449. else this.resume();
  450. PageH5.call(callback, [this.state, this]);
  451. },
  452. fastForward: function(callback) {
  453. if (this.speed >= 32 || this.state == 'fastRewind') this.resume();
  454. else {
  455. this.speed = this.speed * 2;
  456. this.state = 'fastForward';
  457. mp.fastForward(this.speed);
  458. }
  459. PageH5.call(callback, [this.state, this.speed, this]);
  460. },
  461. fastRewind: function(callback) {
  462. if (this.speed >= 32 || this.state == 'fastForward') {
  463. this.resume();
  464. } else {
  465. this.speed = this.speed * 2;
  466. this.state = 'fastRewind';
  467. mp.fastRewind( - this.speed);
  468. }
  469. PageH5.call(callback, [this.state, this.speed, this]);
  470. },
  471. volUp: function(callback) {
  472. var volume = ( + mp.getVolume());
  473. if (is_ott) {
  474. var temp = 5 - (volume % 5);
  475. volume = volume + temp;
  476. } else {
  477. volume += 5;
  478. volume = volume > 100 ? 100 : volume;
  479. }
  480. mp.setVolume(volume);
  481. PageH5.call(callback, [volume, this]);
  482. },
  483. volDown: function(callback) {
  484. var volume = ( + mp.getVolume());
  485. if (is_ott) {
  486. var temp = volume % 5;
  487. temp = temp === 0 ? 5 : temp;
  488. volume = volume - temp;
  489. } else {
  490. volume -= 5;
  491. volume = volume < 5 ? 0 : volume;
  492. }
  493. mp.setVolume(volume);
  494. PageH5.call(callback, [volume, this]);
  495. },
  496. switchAudioChannel: function(callback) {
  497. mp.switchAudioChannel();
  498. PageH5.call(callback, [this.getCurrentAudioChannel(), this]);
  499. },
  500. getCurrentAudioChannel: function() {
  501. if (!mp) return 'Stereo';
  502. return mp.getCurrentAudioChannel() || 'Stereo';
  503. },
  504. toggleMuteFlag: function(callback) {++this.muteFlag;
  505. mp.setMuteFlag(this.muteFlag % 2);
  506. PageH5.call(callback, [this.muteFlag % 2, this]);
  507. },
  508. getMediaStr: function(url) {
  509. var json = '';
  510. json += '[{mediaUrl:"' + url + '",';
  511. json += 'mediaCode: "jsoncode1",';
  512. json += 'mediaType:2,';
  513. json += 'audioType:1,';
  514. json += 'videoType:1,';
  515. json += 'streamType:1,';
  516. json += 'drmType:1,';
  517. json += 'fingerPrint:0,';
  518. json += 'copyProtection:1,';
  519. json += 'allowTrickmode:1,';
  520. json += 'startTime:0,';
  521. json += 'endTime:20000.3,';
  522. json += 'entryID:"jsonentry1"}]';
  523. return json;
  524. },
  525. fullscreenPlay: function(url) {
  526. try {
  527. if (is_ott) {
  528. var type = (url && /\.mp3$/g.test(url)) ? 0 : 1;
  529. mp.initMediaPlayer(url, type);
  530. } else {
  531. mp.setSingleMedia(this.getMediaStr(url));
  532. mp.setVideoDisplayMode(1);
  533. mp.refreshVideoDisplay();
  534. }
  535. mp.playFromStart();
  536. } catch(e) {}
  537. },
  538. smallvodPlay: function(url, left, top, width, height) {
  539. try {
  540. if (is_ott) {
  541. if (url && /\.mp3$/g.test(url)) mp.initMediaPlayer(url, 0);
  542. else mp.initMediaPlayer(url, left, top, width, height);
  543. } else {
  544. mp.setSingleMedia(this.getMediaStr(url));
  545. mp.setVideoDisplayMode(0);
  546. mp.setVideoDisplayArea(left, top, width, height);
  547. mp.refreshVideoDisplay();
  548. }
  549. mp.playFromStart();
  550. } catch(e) {}
  551. },
  552. playByTime: function(second) {
  553. mp.playByTime(1, second);
  554. },
  555. getCurrentPlayTime: function() {
  556. if (mp) return (mp.getCurrentPlayTime() || 0);
  557. else return 0;
  558. },
  559. getMediaDuration: function() {
  560. if (mp) return (mp.getMediaDuration() || 0);
  561. else return 0;
  562. },
  563. parseTimeInfo: function(second) {
  564. var m = Math.floor(second / 60);
  565. m = m < 10 ? ('0' + m) : m;
  566. var s = second % 60;
  567. s = s < 10 ? ('0' + s) : s;
  568. return m + ':' + s;
  569. },
  570. getPlayTimeInfo: function() {
  571. return this.parseTimeInfo(this.getCurrentPlayTime()) + '/' + this.parseTimeInfo(this.getMediaDuration());
  572. },
  573. getRate: function() {
  574. var duration = this.getMediaDuration();
  575. if (duration === 0) return 0;
  576. return this.getCurrentPlayTime() / duration;
  577. },
  578. destroy: function() {
  579. if (mp) mp.stop();
  580. },
  581. isEndOrError: function(keyCode) {
  582. return keyCode === 'EVENT_MEDIA_END' || keyCode === 'EVENT_MEDIA_ERROR';
  583. }
  584. };
  585. (function(document) {
  586. var event_handler = function(e) {
  587. e = e || window.event;
  588. var keyCode = e.which || e.keyCode;
  589. if (keyCode === KEY_IPTV_EVENT) {
  590. eval('oEvent = ' + Utility.getEvent());
  591. PageH5.eventHandler(oEvent.type, true);
  592. } else {
  593. if (keyCode === KEY_BACK) e.preventDefault();
  594. PageH5.eventHandler(keyCode);
  595. }
  596. };
  597. /*if (is_ott || (debug_mode && /webkit/g.test(navigator.userAgent.toLowerCase()))) document.onkeydown = event_handler;
  598. else document.onkeypress = event_handler;*/
  599. try{
  600. Webview.requestFocus();
  601. Webview.setKeyEventHandler(function (action, keyCode, keyName, metaState){
  602. KEY_BACK = KEY_HN_BACK;
  603. KEY_ENTER = KEY_HN_ENTER;
  604. KEY_LEFT = KEY_HN_LEFT;
  605. KEY_UP = KEY_HN_UP;
  606. KEY_RIGHT = KEY_HN_RIGHT;
  607. KEY_DOWN = KEY_HN_DOWN;
  608. KEY_0 = KEY_HN_0;
  609. KEY_1 = KEY_HN_1;
  610. KEY_2 = KEY_HN_2;
  611. KEY_3 = KEY_HN_3;
  612. KEY_4 = KEY_HN_4;
  613. KEY_5 = KEY_HN_5;
  614. KEY_6 = KEY_HN_6;
  615. KEY_7 = KEY_HN_7;
  616. KEY_8 = KEY_HN_8;
  617. KEY_9 = KEY_HN_9;
  618. PageH5.eventHandler(keyName);
  619. });
  620. }catch(e){
  621. document.onkeydown = event_handler;
  622. }
  623. })(document);