поддерживает ли видеокомпонент vaadin атрибут предварительной загрузки

У меня более 10 видеороликов в формате mp4, которые я привязываю для встраивания в свое веб-приложение с помощью видеокомпонента vaadin. Когда я запускаю свое приложение в Edge / IE, видео работают нормально, но в Chrome - нет. Известная проблема с Chrome: если на странице больше 6-8 видеороликов mp4, она зависает при попытке предварительно загрузить их все вместе. Мне было интересно, предоставляет ли видеокомпонент мне возможность отключить предварительную загрузку. Я вижу, что в медиа-базе есть эта опция https://vaadin.com/api/7.6.7/index.html?com/google/gwt/media/client/MediaBase.html Но я не вижу этого для видео. Также я нашел другую ссылку, где они, кажется, исправляют https://github.com/vaadin/framework/issues/5178, но не смог заставить его работать.

Любая помощь?


person user1631306    schedule 19.06.2017    source источник


Ответы (1)


Пока фиксация / PR в ваших ссылках не будет объединена, этого не произойдет в 7 или 8.

Однако для этого можно использовать AbstractExtension и AbstractExtensionConnector.

AbstractExtension

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);

Некоторые примечания (потому что ваадин временами может причинять боль)

  1. Если у вас уже есть библиотечный модуль, лучше всего добавить к нему указанные выше классы.
  2. Убедитесь, что модуль, в который вы добавляете эти классы, имеет следующую добавленную зависимость, чтобы набор виджетов был скомпилирован:

    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-client</artifactId>
    </dependency>
    
  3. Помните, что VideoPreloadConnector должен быть в имени пакета, оканчивающемся на «.client».

Вот скриншот работающего элемента проверки из хрома:

снимок экрана с проверкой элемента из Chrome

HTHs!

person petey    schedule 19.06.2017