Botframework-WebChat — Почему он не работает с Internet Explorer?

У меня веб-чат работает правильно в Chrome, но не в IE. Мое приложение представляет собой веб-сайт Angular, использующий WebChat для подключения к моему боту.

Код выглядит так (технически это TypeScript, а не JavaScript, стрелочные функции перенесены):

directLine: DirectLine = new DirectLine({ secret: environment.botDirectLineSecretKey }) 

@ViewChild("botWindow") botWindowElement: ElementRef;

ngOnInit() {

    this.directLine.activity$
      .filter(activity => activity.type === "event" && activity.name === "init")
      .subscribe(activity => this.changeSize());

    BotChat.App({
      botConnection: this.directLine,
      user: { id: 'user' },
      bot: { id: 'bot' },
    }, this.botWindowElement.nativeElement);

}

changeSize(){
    console.log("here")
    var container = document.getElementById("bot-chat-container");
    container.classList.add("fullSize");
}  

В Internet Explorer я получаю эту ошибку в консоли:

ОШИБКА TypeError: вы указали недопустимый объект там, где ожидался поток. Вы можете предоставить Observable, Promise, Array или Iterable.

Если я переключаю botConnection: this.directLine на directLine: this.directLine, веб-чат работает, но тогда метод changeSize() никогда не вызывается.

Любая помощь приветствуется. Этот бот находится на общедоступном веб-сайте, и IE должен поддерживаться.


person Schwammy    schedule 17.01.2018    source источник
comment
Это выстрел в темноте, но пробовали ли вы .subscribe до .filter   -  person D4RKCIDE    schedule 18.01.2018
comment
Спасибо, но нет. Я понял. Свойство «фильтр» не существует для типа «Подписка». Но попробовать стоило.   -  person Schwammy    schedule 18.01.2018


Ответы (2)


Я нашел ответ. После прочтения ответов и комментариев, которые были опубликованы, я создал «ванильную» версию этого кода на html/JavaScript, и она, как сказал выше Эрик Дальванг, работала отлично. Затем я некоторое время сосредоточился на Angular.

Затем я заметил одно отличие в моем исходном коде Angular по сравнению с моей простой версией JavaScript и образцами, найденными здесь: https://github.com/Microsoft/BotFramework-WebChat. Я сделал простое изменение:

Изменено это: directLine: DirectLine = new DirectLine({ secret: environment.botDirectLineSecretKey })

к этому: directLine: DirectLine = new BotChat.DirectLine({ secret: environment.botDirectLineSecretKey }) (обратите внимание, что сейчас я использую BotChat.DirectLine)

и все работает. К сожалению, я не знаю почему.

person Schwammy    schedule 18.01.2018
comment
Приятно видеть, что вы исправили это. Интересно, почему new DirectLine() не был пойман TypeScript, потому что DirectLine кажется неопределенным в вашем случае. - person Compulim; 18.01.2018

Стрелочные функции не поддерживаются в IE:

https://caniuse.com/#feat=arrow-functions

https://docs.microsoft.com/en-us/scripting/javascript/functions-javascript#arrow-functions

Код, которым вы поделились, должен работать в IE, если он изменен для использования реальных функций:

    this.directLine.activity$
        .filter(isInitEvent)
        .subscribe(changeSize);

...

    function isInitEvent(activity) {
        return activity.type === "event" && activity.name === "init";
    }

    function changeSize(activity) {
        console.log("here")
        var container = document.getElementById("bot");
        container.classList.add("fullSize");
    }  
person Eric Dahlvang    schedule 17.01.2018
comment
Спасибо за ответ. К сожалению, я все еще получаю сообщение об ошибке. Если я разверну сообщение об ошибке в IE, могу получить эту трассировку стека: at e.prototype.error (https://cdn.botframework.com/botframework-webchat/latest/botchat.js:6:4949) - person Schwammy; 18.01.2018
comment
Кроме того, я рассмотрел это немного больше. Извините, я не ясно выразился, но мой код - TypeScript, поэтому функции стрелок перенесены. - person Schwammy; 18.01.2018
comment
@Schwammy, почти невозможно помочь больше, если у нас нет дополнительной информации / деталей кода. Веб-чат работает в IE, это только конкретная точка на вашей стороне, и нам нужно больше деталей. - person Nicolas R; 18.01.2018