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 有时会很痛苦)
- 如果你已经有一个库模块,最好添加上面的类。
确认您添加这些 类 的模块具有以下依赖项添加,以便编译小部件集:
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-client</artifactId>
</dependency>
请记住,VideoPreloadConnector
需要位于以“.client”结尾的包名称中。
这是来自 chrome 的 inspect 元素的截图:
HTHs!
我有超过 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 有时会很痛苦)
- 如果你已经有一个库模块,最好添加上面的类。
确认您添加这些 类 的模块具有以下依赖项添加,以便编译小部件集:
<dependency> <groupId>com.vaadin</groupId> <artifactId>vaadin-client</artifactId> </dependency>
请记住,
VideoPreloadConnector
需要位于以“.client”结尾的包名称中。
这是来自 chrome 的 inspect 元素的截图:
HTHs!