ckplayer-plus 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # ckplayer-plus
2
2
 
3
- 基于 [ckplayer](https://www.ckplayer.com) X3 的工程化封装:支持 **npm / ESM**,并提供 **Vue 2/3** 与 **React** 组件。
3
+ 基于 [ckplayer](https://www.ckplayer.com) X3 的工程化封装:支持 **npm / ESM**,并提供 **Vue 2.7+/3** 与 **React** 组件。
4
4
 
5
5
  > **免责声明**:本包为社区/工程化封装,**非 ckplayer 官方包**。播放内核来自 ckplayer(MIT)。完整能力与参数请同时参考 [官方手册](https://www.ckplayer.com/manual/)。npm 上的官方包名为 [`ckplayer`](https://www.npmjs.com/package/ckplayer),请勿混淆。
6
6
 
@@ -95,14 +95,16 @@ React:
95
95
  ### 插件加载优先级
96
96
 
97
97
  1. `preferBuiltinPlug: false` 且页面已有全局 `Hls` / `flvjs` / `mpegts` → 直接复用
98
- 2. 否则加载本包脚本:`pluginPath` `window.ckplayerBasePath`
98
+ 2. 否则加载本包脚本:`pluginPath` 或可信的 `window.ckplayerBasePath`(仅 dist / npm 包路径会自动设置;Vite/Webpack chunk 目录会忽略)
99
99
  3. 传统 `<script src=".../ckplayer.min.js">` 同级目录推导
100
- 4. `cdnFallback !== false` 时回退:`https://cdn.jsdelivr.net/npm/ckplayer-plus@x.y.z/dist/`
100
+ 4. `cdnFallback !== false` 时回退:`https://cdn.jsdelivr.net/npm/ckplayer-plus@x.y.z/dist/`;若本地路径 404 会再自动重试一次 CDN
101
101
 
102
102
  > 内网离线:把 `node_modules/ckplayer-plus/dist/` 里的 `hls.js/` 等目录放到可访问静态路径,并设置 `pluginPath` 或 `window.ckplayerBasePath`,建议同时 `cdnFallback: false`。
103
103
  > 样式请使用 `import 'ckplayer-plus/style.css'`,保证 `./images/` 图标能被打包工具解析。
104
104
 
105
- ## Vue 2 / Vue 3
105
+ ## Vue 2.7 / Vue 3
106
+
107
+ 支持 **Vue 2.7+** 与 **Vue 3**(需从 `vue` 解析 `h`,与 peerDependencies 一致)。
106
108
 
107
109
  ```vue
108
110
  <template>
@@ -170,9 +172,3 @@ npm publish --access public
170
172
  ## License
171
173
 
172
174
  MIT。内置的 hls.js / flv.js / mpegts.js 遵循各自许可证(多为 Apache-2.0)。
173
-
174
- ## 相关链接
175
-
176
- - 官网:https://www.ckplayer.com
177
- - 手册:https://www.ckplayer.com/manual/
178
- - 官方 npm:https://www.npmjs.com/package/ckplayer
package/dist/ckplayer.js CHANGED
@@ -141,7 +141,7 @@
141
141
  cdnFallback:true// getPath 失败时是否回退到 jsDelivr(内网可设 false,并配置 pluginPath)
142
142
  };
143
143
  // 打包时替换为真实版本;用于 bundler 下 getPath 失效时的 CDN 回退
144
- var ckplayerPlusDefaultCdn='https://cdn.jsdelivr.net/npm/ckplayer-plus@1.0.3/dist/';
144
+ var ckplayerPlusDefaultCdn='https://cdn.jsdelivr.net/npm/ckplayer-plus@1.0.5/dist/';
145
145
  function ckplayerEmbed(videoObj){
146
146
  /*
147
147
  * rightMenu
@@ -371,6 +371,16 @@
371
371
  return embed(obj);
372
372
  }
373
373
  },
374
+ /*
375
+ * isUnreliablePluginBase
376
+ * 功能:识别 bundler chunk 目录(不含 hls.js 等插件),避免短路 CDN 回退
377
+ */
378
+ isUnreliablePluginBase=function(base){
379
+ if(!base || valType(base)!='string'){
380
+ return true;
381
+ }
382
+ return /\/(?:assets|\.vite\/deps|_next\/static|chunks?)\/?$/i.test(base);
383
+ },
374
384
  /*
375
385
  * resolveAssetPath
376
386
  * 功能:解析插件/语言包路径
@@ -384,6 +394,9 @@
384
394
  else if(typeof window!=='undefined' && window.ckplayerBasePath){
385
395
  base=window.ckplayerBasePath;
386
396
  }
397
+ if(base && isUnreliablePluginBase(base)){
398
+ base='';
399
+ }
387
400
  if(base){
388
401
  if(base.slice(-1)!=='/'){
389
402
  base+='/';
@@ -391,12 +404,12 @@
391
404
  return base+folder+'/'+file;
392
405
  }
393
406
  var fromScript=getPath(folder)+file;
394
- if(fromScript && fromScript.indexOf(folder+'/')>-1 && fromScript.indexOf('undefined')===-1){
407
+ if(fromScript && fromScript.indexOf(folder+'/')>-1 && fromScript.indexOf('undefined')===-1 && !isUnreliablePluginBase(getPath())){
395
408
  return fromScript;
396
409
  }
397
410
  var allowCdn=!vars || vars['cdnFallback']!==false;
398
411
  var cdn=(typeof window!=='undefined' && window.ckplayerPlusCdn) ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
399
- if(!allowCdn || !cdn || cdn.indexOf('1.0.3')>-1){
412
+ if(!allowCdn || !cdn || cdn.indexOf('1.0.5')>-1){
400
413
  // 避免占位版本或显式关闭 CDN 时请求坏地址;交给相对路径或业务 pluginPath
401
414
  return folder+'/'+file;
402
415
  }
@@ -6693,7 +6706,7 @@
6693
6706
  * @file:js文件地址
6694
6707
  * @callback:加载完成后执行的函数
6695
6708
  */
6696
- loadJs=function(file, callback) {
6709
+ loadJs=function(file, callback, isRetry) {
6697
6710
  var fn =function() {};
6698
6711
  if(!isUndefined(callback)){
6699
6712
  fn=callback;
@@ -6725,19 +6738,38 @@
6725
6738
  } catch(event) {};
6726
6739
  }, 10);
6727
6740
  };
6741
+ var removeScript = function() {
6742
+ try {
6743
+ if(script.parentNode){
6744
+ script.parentNode.removeChild(script);
6745
+ }
6746
+ } catch(event) {}
6747
+ };
6728
6748
  var w3c = function() {
6729
- if(valType(fn) == 'function') {
6730
- fn();
6731
- }
6732
6749
  removeListener(script, 'load', w3c);
6733
6750
  removeListener(script, 'error', w3cError);
6751
+ doReady();
6734
6752
  };
6735
6753
  var w3cError = function() {
6736
- if(valType(fn) == 'function') {
6737
- fn();
6738
- }
6739
6754
  removeListener(script, 'load', w3c);
6740
6755
  removeListener(script, 'error', w3cError);
6756
+ removeScript();
6757
+ // bundler 下错误 base 路径 404 时,回退 jsDelivr 再试一次
6758
+ if(!isRetry && (!vars || vars['cdnFallback']!==false)){
6759
+ var cdn=(typeof window!=='undefined' && window.ckplayerPlusCdn) ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
6760
+ var m=String(file).match(/\/(hls\.js|flv\.js|mpegts\.js|language)\/([^/?#]+)(?:[?#].*)?$/i);
6761
+ if(cdn && cdn.indexOf('1.0.5')===-1 && m){
6762
+ if(cdn.slice(-1)!=='/'){
6763
+ cdn+='/';
6764
+ }
6765
+ var retryUrl=cdn+m[1]+'/'+m[2];
6766
+ if(retryUrl!==file){
6767
+ loadJs(retryUrl, callback, true);
6768
+ return;
6769
+ }
6770
+ }
6771
+ }
6772
+ // 加载失败不再假装成功,避免在 Hls/flvjs 未定义时继续执行
6741
6773
  };
6742
6774
  try {
6743
6775
  addListener(script, 'load', w3c);
@@ -7021,13 +7053,19 @@
7021
7053
  function getPath(siz) {
7022
7054
  if (typeof window !== 'undefined' && window.ckplayerBasePath) {
7023
7055
  var base = window.ckplayerBasePath;
7024
- if (base.slice(-1) !== '/') {
7025
- base += '/';
7056
+ // bundler chunk 目录不含插件文件,忽略并继续 script/CDN 推导
7057
+ if (/\/(?:assets|\.vite\/deps|_next\/static|chunks?)\/?$/i.test(base)) {
7058
+ base = '';
7026
7059
  }
7027
- if (!isUndefined(siz)) {
7028
- return base + siz + '/';
7060
+ if (base) {
7061
+ if (base.slice(-1) !== '/') {
7062
+ base += '/';
7063
+ }
7064
+ if (!isUndefined(siz)) {
7065
+ return base + siz + '/';
7066
+ }
7067
+ return base;
7029
7068
  }
7030
- return base;
7031
7069
  }
7032
7070
  var scriptList = document.scripts || [],
7033
7071
  thisPath = scriptList.length ? scriptList[scriptList.length - 1].src : '';