我的网聊可以在Chrome中正常运行,但不能在IE中运行。
我的应用程序是一个使用WebChat连接到我的机器人的Angular网站。
代码看起来像这样(从技术上讲,这是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。
最佳答案
我找到了答案。阅读了发布的答案和评论后,我创建了此代码的“原始” html / JavaScript版本,正如上面的Eric Dahlvang所述,它可以完美地工作。然后,我专注于事物的角度一侧。
然后,我注意到我的原始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)
一切正常。不幸的是,我不知道为什么。