На версии 43 Хрома Silverlight перестал работать (по крайней мере для BPM). В версии 45 он будет отключен окончательно (что мы можем наблюдать, используя Chrome Canary).

Тем, кто не в курсе сюда

не рабочий Silverlight означает, что вы не сможете:
- редактировать Бизнес-процессы
- редактировать код модулей
- редактировать стили
- просматривать схему пакетов
- редактировать сервисы SQL-скриптов
Все это очень печально, и хотелось бы надеяться, что в 7.6 мы получим все эти дизайнеры на новой платформе и в полном объеме.
В Internet Explorer пока все работает (рискну предположить, что он будет поддерживать Silverlight до последнего)

Нравится

4 комментария

Дмитрий, начиная с версии 7.7 данный вопрос будет решен.
Для bpm'online версий ниже можно использовать другие поддерживаемые браузеры для работы в системе.

Я себе для разработки поставил пока Google Chrome 41, отключив возможность обновления.

Ну вот корпорация добра и сделала нам подарок, теперь как на планшете будет :)

А на что переезжаете с 7.7 ?

"Александр Кудряшов" написал:А на что переезжаете с 7.7 ?

Дизайнер процессов будет построен с использованием технологии SVG, т.е. не потребует каких-либо сторонних компонент для работы. По сути сейчас такой подход уже используется в дизайнере кампаний в bpm'online marketing и в мастере процессов во всех продуктах линейки.

Показать все комментарии

Добрый день.
Вчера обнаружилась проблема связанная с Silverlight в браузере Google Chrome.
Google Chrome незаметно для пользователя устанавливает обновление, после чего в дизайнере бизнес-процессов перестаёт работать плагин Silverlight.

При этом, скачав Silverlight по кнопке «Установить сейчас», при попытке установить его, установщик выдает ошибку «Не удалось установить Silverlight».

Данная ошибка связана с тем, что в Google Chrome обновленной версии (v.42) было принято решение отказаться от плагина Silverlight, но пользователям оставили возможность включить его вручную.
Для этого:

  1. Введите в адресной строке: chrome://flags/#enable-npapi
  2. Выберите «Включить» для опции «Включить NPAPI»
  3. Перезапустите браузер

После этого плагин Silverlight снова должен начать работать.
Подробнее об изменении можно почитать тут.

Нравится

Поделиться

5 комментариев

интересно, вы нашли то же, что и я?:razz:

"Андросов Дмитрий" написал:

интересно, вы нашли то же, что и я?


Community как мини-хабр:smile:

Есть идея после полного отключения Silverlight использовать разнообразные сборки Хромиума.
Обычно они базируются на более старых версиях движка, где поддержка SL ещё есть.

К примеру, браузер QIP Surf использует движок 2012 года, процессы там открываются.
qip surf

Возможно, есть и лучшие варианты, где движок более свежий, но всё ещё с SL. Откажутся ли от поддержки NPAPI-плагинов те же Opera и Яндекс-браузер — пока неизвестно.

Предлагайте свои варианты.

А в версии 45.0.2454.85 m уже не могу найти этой настройки

Браузер Mozilla Firefox с версии 52, которая вышла на днях, перестал поддерживать плагин Silverlight.

Но есть Firefox 52 ESR с длительным сроком поддержки (ESR), который будет поддерживать эти плагины вплоть до марта 2018 года.
Подробнее о нём можно узнать на страницах:
https://www.mozilla.org/en-US/firefox/52.0esr/releasenotes/
https://www.mozilla.org/en-US/firefox/organizations/faq/
Скачать можно по адресам:
https://www.mozilla.org/en-US/firefox/organizations/all/
https://ftp.mozilla.org/pub/firefox/releases/52.0esr/ (выбрать нужную папку)

Показать все комментарии

Возможно, вашему проекту на BPMonline понадобится возможность использования буфера обмена операционной системы. Немного погуглив можно обнаружить, что сделать это напрямую со страницы HTML средствами javascript невозможно в связи с политикой безопасности, конкретно, запись в него может быть использована в нехороших целях злоумышленниками. Обходных путей несколько

1) Каждый браузер имеет своё контекстное меню, которое имеет доступ к странице и может быть вызвано поверх логики страницы, и при случае скопировать выделенный текст элемента страницы. В Firefox это реализовано через плагин, так что вы можете взаимодействовать с ним. В IE имеется прямой доступ через window.clipboardData , что является нарушением безопасности. В остальных браузерах конкретного решения нет.

Недостатки: под каждый браузер необходимо писать свою реализацию, и не все браузеры вообще имеют такую возможность.

2) Использовать Flash (старый отработанный метод), который позволяет работать с ClipBoard .Для этого даже создан javascript код ZeroClipBoard (один js и один swf файлы), используемый многими в качестве готового решения.

Недостатки:
- Flash постепенно становится непопулярной технологией и возможно перестанет быть стандартом из-за прихода HTML5
- по умолчанию не позволяет работать с локальным сайтом, нужно настраивать Flash Player для этого
- необходимо использовать "crossdomain.xml" для разрешения кросс-доменнного доступа, т.е. иметь прямой доступ к шаблонам страниц, чего в BPmonline для проектных решений нет.

3) Использовать Silverlight, который аналогично Flash позволяет получать доступ к ClipBoard через свой контекст.
Недостатки:
- Silverlight - это тоже не чистый HTML, поэтому нелюбители этой технологии могут отказаться от данного решения, но он набирает свои обороты и становится популярным. К тому же для BPMonline - это родная технология, и её наличие обязательно на машине клиента.

В итоге была выбрана 3 технология в виду наименьших недостатков.
Сразу скажу.Статья была сделана на основании конкретной задачи в рамках проекта Zyxel - добавить в каждый TreeGrid возможность копирования в буфер обмена выделенной ячейки реестра . Код иэ той задачи специфичен конкретно для данной реализации под TreeGrid, поэтому в статье будут приведены только основные моменты.

Создаём silverlight-проект типа application, где имеются два объекта
App.xaml - инициализация
Ваш класс ClipBoard>.xaml - класс, реализующий доступ к ClipBoard

На странице вашего класса создаём два контрола - кнопку, которая будет нажимать для копирования в буфер обмена и невидимое поле. Пример разметки

    x:Name="LayoutRoot" Background="White">
        >
            />
        >
         Margin="0,0,0,0"  Click="Copy"  Content="C" Foreground="#2F5B97" Height="20" Width="20" Background="#2F5B97"/>
         x:Name="txtText"  Margin="0"  Text="{Binding Text}"  Width="0" Height="0" />
    >

Почему так? Почему кнопка, а не Ctrl+C ? Дело в том, что на нажатие клавиш Ctrl+C контейнер silverlight будет реагировать только, если это нажатие будет внутри контейнера(silverlight в фокусе), а у нас нажатие будет на странице. Во-вторых, silverlight имеет одно, но существенное ограничение при доступе к ClipBoard, это можно сделать, но только из контекста Silverlight и только с подачи пользователя, т.е. должна быть нажата кнопка или любое другое событие, недоступное из javascript (private), иначе это ничем бы не отличалось от доступа напрямую из javascript (только через вызов silverlight метода).
Кнопка будет записывать текст в ClipBoard. Но как этому событию передать заданный текст. Для этого сначала надо этот текст получить. Можно вызвать javascript метод, который вернёт в качестве результата выделенный текст. Из silverlight можно вызвать javascript-метод, и передать ему параметры-значения через HtmlPage.Window.Invoke, но нельзя напрямую получить результат, поэтому я использовал текстовое поле, в которое вызванный javascript может записать результат.
В итоге получился следующий класс
  [ScriptableType]
    public partial class ClipBoardBase : UserControl
    {
        public string JavascriptFunctionName;
        public ClipBoardBase()
        {
            InitializeComponent();
            HtmlPage.RegisterScriptableObject("silverlightClipBoard", this);
            JavascriptFunctionName = "";
        }
        [ScriptableMember]
        public void CopyToTextEdit(string text)
        {
            txtText.Text = text;
        }
        [ScriptableMember]
        private void Copy(object sender, RoutedEventArgs e)
        {
            HtmlPage.Window.Invoke(JavascriptFunctionName);
            Clipboard.SetText(txtText.Text);
        }
    }

[ScriptableType] и [ScriptableMember] - обязательно для класса и метода, если хотите иметь доступ к ним со страницы
HtmlPage.RegisterScriptableObject("silverlightClipBoard", this) - под указанным именем регистрируется объект на странице и к нему можно будет обращаться(см. ниже)
JavascriptFunctionName - имя функции, которая вызывается для записи значения в текстовое поле, для дальнейшего копирования в буфер обмена.
CopyToTextEdit - будет вызвана со страницы для записи результата в текстовое поле
Copy - метод по нажатию кнопки, в конце копирует в буфер обмена

Это всё, что нужно со стороны silverlight, в результате вы получаете xap файл - контейнер silverlight, который обычно кладут в ClientBin папку сервера.
Теперь что же нужно сделать со стороны страницы
- подготовить и создать объект silverlight на странице
- подготовить и создать функцию, которая будет вычитывать копируемое в буфер значение со страницы и записывать его в текстовое поле silverlight
Всё это делается одним скриптом на PageLoadComplete с помощью Page.AddScript(script):

для добавление используется файл Silverlight.js - поставляется Microsoft, в BPMonline уже добавлен

var silverlightparent//родительский объект для silverlight;
var silverlightdiv = document.createElement('div');
b = new Object();
b.source = document.location.href.substring(0,document.location.href.lastIndexOf('/')) + '/ClientBin/ClipBoard.xap';
b.properties = {};
b.properties.version = '4.0.50303';
b.properties.width = 20;b.properties.height = 20;
b.parentElement = silverlightparent;
b.id = 'silverlightClipBoardElement';
b.events = null;
b.initParams = 'JavascriptFunctionName=silverlightClipBoardCopyToEdit';
b.context = null;
silverlightdiv.innerHTML = Silverlight.createObjectEx(b);
silverlightClipBoardElement = document.getElementById('silverlightClipBoardElement');

Silverlight.createObjectEx - cоздаёт объект на странице
b.source = относительный путь к xap файлу
b.properties = {};
b.properties.version - минимальная требуемая silverlight версия
b.properties.width- размеры
b.parentElement - родительский DOM-элемент
b.id - по нему можно найти объект, в котором находится контейнер
b.initParams - начальные параметры, будут переданы в конструктор класса, задаются в виде 'key1=value1;key2=value2', их можно вычитать, я таким образом передаю название функции, которая будет работать на стороне javascript
silverlightClipBoardElement - глобальная переменная для доступа к объекту

а теперь сама функция

silverlightClipBoardCopyToEdit = function() {
// получить значение текста для буфера обмена     
silverlightClipBoardElement.content.silverlightClipBoard.CopyToTextEdit(CopyValue);
                }

посмотрите, как можно обращаться к методу , для этого у DOM-объекта silverlightClipBoardElement обращаемся к объекту, зарегистрированному под именем silverlightClipBoard (см. конструктор класса silverlight), и далее к методу, передавая заветное CopyValue.

В общем порядок работы такой
Нажатие кнопки -> Вызов javascript-метода из метода кнопки-> Javascript вычитывает копируемое значение -> Вызова silverlight-метода и запись в текстовое поле значения -> Возврат в Javascript-метод-> Возврат в метод кнопки silverlight -> Чтение значения из текстового поля и запись его в буфер обмена.

Нравится

Поделиться

1 комментарий

Появилась штатная поддержка в браузерах.

Показать все комментарии