vaadin视频组件是否支持preload属性

does vaadin video component support preload attribute

我有超过 10 个 mp4 视频,我想使用 vaadin 视频组件将它们嵌入到我的 Web 应用程序中。当我 运行 我在 Edge/IE 上的应用程序时,视频工作正常,但在 chrome 上他们不工作。 chrome 的已知问题是,如果页面包含超过 6-8 个 mp4 视频,它会在尝试将所有视频一起预加载时挂起。 我想知道视频组件是否为我提供了将预加载设置为 none 的选项。我可以看到媒体库有这个选项 https://vaadin.com/api/7.6.7/index.html?com/google/gwt/media/client/MediaBase.html 但我没有看到它的视频。 我还发现了另一个 link,他们似乎在其中进行了修复 https://github.com/vaadin/framework/issues/5178,但无法使其正常工作。

有什么帮助吗?

在您的链接中的 commit/PR 合并之前,它不会在 7 或 8 中。

但是,您可以使用 AbstractExtension 和 AbstractExtensionConnector 来完成此操作。

抽象扩展

package com.my.package;

import com.vaadin.server.AbstractClientConnector;
import com.vaadin.server.AbstractExtension;
import com.vaadin.ui.AbstractComponent;
public class VideoPreloadExtension extends AbstractExtension {

    public VideoPreloadExtension() {
    }

    public VideoPreloadExtension(AbstractClientConnector target) {
        super(target);
    }

    public void extend(AbstractComponent component) {
        super.extend(component);
    }

}

AbstractExtensionConnector

package com.my.package.client;

import com.google.gwt.user.client.ui.Widget;
import com.vaadin.client.ComponentConnector;
import com.vaadin.client.ServerConnector;
import com.vaadin.client.extensions.AbstractExtensionConnector;
import com.my.package.VideoPreloadExtension;
import com.vaadin.shared.ui.Connect;

@Connect(VideoPreloadExtension.class)
public class VideoPreloadConnector extends AbstractExtensionConnector {

    @Override
    protected void init() {
        super.init();
    }

    @Override
    protected void extend(ServerConnector target) {
        // Get the extended widget
        final Widget widget = ((ComponentConnector) target).getWidget();
        widget.getElement().setAttribute("preload","auto");
    }
}

用法如下:

Video image = new Video();
VideoPreloadExtension ext = new VideoPreloadExtension();
ext.extend(image);

一些注意事项(因为 vaadin 有时会很痛苦)

  1. 如果你已经有一个库模块,最好添加上面的类。
  2. 确认您添加这些 类 的模块具有以下依赖项添加,以便编译小部件集:

    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-client</artifactId>
    </dependency>
    
  3. 请记住,VideoPreloadConnector 需要位于以“.client”结尾的包名称中。

这是来自 chrome 的 inspect 元素的截图:

HTHs!