我正在尝试使用从页面中的bot webchat控件发送的每条消息注入channelData。我环顾四周,找到了这个样本(https://cmsdk.com/javascript/how-to-send-custom-channel-data-when-using-web-chat-client-with-bot-framework.html),我的代码看起来像下面的代码。
问题在于这适用于Chrome,但展开运算符(...)在Edge或IE上不起作用。是否有可以在所有浏览器中使用的替代语法?
var user = {
id: '@User.Identity.Name',
name: '@User.Identity.Name'
};
var bot = {
id: BotId,
name: 'BotName'
};
var botConnect = new BotChat.DirectLine({
secret: '@ViewData["BotSecret"]',
webSockets: 'true'
});
var v = { ...botConnect };
debugger;
BotChat.App({
botConnection: {
...botConnect,
postActivity: activity => {
activity.channelData = {
StudentId: '@User.Identity.Name'
};
return botConnect.postActivity(activity);
}
},
user: user,
bot: bot,
resize: 'detect'
}, document.getElementById("bot"));
答案 0 :(得分:0)
看起来Babel有a plugin,它使用Object.assign
将Spread运算符转换为等效代码。这并不能完全解决您的问题,因为IE仍然不支持Object.assign
- 在Babel的情况下,Object.Assign
包含了一个polyfill。虽然在您的项目中包含Babel可能有点过分,但MDN has sample code可能更合理地包含一个简单的独立Object.assign
polyfill。
如果这是一个令人满意的依赖关系,那么一旦Object.assign
可用于跨浏览器,Babel文档就会建议两行代码是等效的:
在:
z = { x, ...y };
输出:
z = Object.assign({ x }, y);
答案 1 :(得分:0)
关闭这个循环,我和一些知道他们JS的人一起工作,我们实现了一个“扩展等效”功能,适用于IE,Chrome和Edge(尚未在Safari中测试过,但我想它应该可行)那里也是)。
IE不喜欢=>运算符,所以我们将其更改为函数,这是结果代码:
var user = {
id: '@User.Identity.Name',
name: '@User.Identity.Name'
};
var bot = {
id: 'TheBotId',
name: 'TheBotName'
};
var botConnect = new BotChat.DirectLine({
secret: 'TheBotSecret',
webSockets: 'true'
});
// Spread equivalent function
function getBotConnectionDetail(botconnection) {
var botConnectionDetail = {};
var keys = Object.keys(botconnection);
for (var i = 0; i < keys.length; i++) {
botConnectionDetail[keys[i]] = botconnection[keys[i]];
};
botConnectionDetail['postActivity'] = function (activity) {
activity.channelData = {
StudentId: '@User.Identity.Name'
};
return botconnection.postActivity(activity)
};
return botConnectionDetail;
}
// Invokes Bot
BotChat.App({
botConnection: getBotConnectionDetail(botConnect),
user: user,
bot: bot,
resize: 'detect'
},
document.getElementById("bot")
);