You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ExtJS中加载视频?避免Window组件生成新URL

用Ext.XTemplate实现无URL变更的视频加载

当然可以用Ext.XTemplate来搞定这个需求!而且这是个相当合适的选择——因为XTemplate本质就是用来渲染HTML片段的工具,完全不会触发页面跳转或者URL修改,正好解决了你用Window组件遇到的痛点。

下面是具体的实现思路和代码示例:

1. 定义包含视频标签的XTemplate

你可以直接在模板里写原生的<video>标签,根据需求设置视频源、控制栏、尺寸等属性:

// 定义视频模板
const videoTemplate = new Ext.XTemplate(
    '<div class="custom-video-wrapper">',
        '<video controls width="640" height="360" poster="{posterUrl}">',
            '<source src="{videoSrc}" type="video/mp4">',
            '<p>抱歉,你的浏览器不支持HTML5视频播放</p>',
        '</video>',
    '</div>'
);

2. 将模板渲染到现有容器中

不需要新建Window,你可以把渲染后的视频内容直接放到任意ExtJS容器里(比如Panel、Viewport,甚至页面上的普通DOM元素):

// 创建一个承载视频的Panel
Ext.create('Ext.panel.Panel', {
    renderTo: Ext.getBody(),
    title: '内嵌视频播放器',
    width: 720,
    height: 500,
    style: 'margin: 20px',
    // 应用模板并传入视频数据
    html: videoTemplate.apply({
        videoSrc: 'your/video/path.mp4', // 替换为你的视频地址
        posterUrl: 'your/poster/image.jpg' // 可选:视频封面图
    })
});

3. 动态更新视频的小技巧

如果需要切换视频内容,只需要重新调用模板的apply方法,再更新容器的html属性即可,全程不会影响当前URL:

// 假设我们已经获取了这个Panel的实例
const videoPanel = Ext.ComponentQuery.query('panel[title="内嵌视频播放器"]')[0];
// 切换到新视频
videoPanel.update(videoTemplate.apply({
    videoSrc: 'new/video/path.mp4',
    posterUrl: 'new/poster/image.jpg'
}));

补充:关于Window的URL问题

顺便提一句:默认情况下ExtJS的Window组件是不会修改URL的,除非你配置了路由相关的属性(比如history、routeId这类)。如果之前的Window方案是因为路由配置导致的URL变化,也可以检查下配置项调整。不过用XTemplate的方案确实更轻量,完全规避了这类潜在问题。

内容的提问来源于stack exchange,提问作者sandy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:34:29