2017-10-20 160 views
1

我想注入channelData与每个消息是从一个僵尸网页控制在一个页面发送。我环顾四周,发现这个示例(https://cmsdk.com/javascript/how-to-send-custom-channel-data-when-using-web-chat-client-with-bot-framework.html),我的代码看起来像下面的代码。发送channelData到网络聊天与每条消息

问题是,这可以在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

边缘应该支持每http://kangax.github.io/compat蔓延-table/es6 /#test-spread _(...)_运营商 –

+0

我认为您需要手动启用实验性功能才能正常工作,并且不希望最终用户必须这样做。我不认为有一个解决方法为IE浏览器。 – GaboG

回答

0

它看起来像巴贝尔具有a plugin使用Object.assign,其将传播到操作者的等效代码。这并不能完全解决你的问题,因为IE仍然不支持Object.assign - 在Babel的情况下,Object.Assign包含一个polyfill。虽然在您的项目中包含Babel可能会过度杀伤,但MDN has sample code可能包含更合理的简单独立Object.assign填充。

如果这是一个愉快的依赖,那么一旦Object.assign是提供给您的跨浏览器,巴贝尔文档建议的两行代码是等价的:

在:

z = { x, ...y }; 

出:

z = Object.assign({ x }, y); 
0

只是CLO在这个循环中唱歌,我和一些知道他们的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") 
);