Javascript 在DNN站点中嵌入bot
我必须在一个由.NETNuke(DNN)构建的页面中嵌入一个微软机器人框架的机器人。我不能用IFRAME来实现这一点,因为我必须从DNN中插入聊天参数,所以我按照示例使用Javascript和DirectLine插入聊天窗口。现在的问题是,当我尝试向我的机器人发送消息时,页面会完全重新加载,因为它是来自某个html表单的提交请求。这是我在Javascript 在DNN站点中嵌入bot,javascript,html,botframework,dotnetnuke,direct-line-botframework,Javascript,Html,Botframework,Dotnetnuke,Direct Line Botframework,我必须在一个由.NETNuke(DNN)构建的页面中嵌入一个微软机器人框架的机器人。我不能用IFRAME来实现这一点,因为我必须从DNN中插入聊天参数,所以我按照示例使用Javascript和DirectLine插入聊天窗口。现在的问题是,当我尝试向我的机器人发送消息时,页面会完全重新加载,因为它是来自某个html表单的提交请求。这是我在.ascx文件中的代码: <script src="https://cdn.botframework.com/botframework-webchat/l
.ascx
文件中的代码:
<script src="https://cdn.botframework.com/botframework-webchat/latest/botchat.js"></script>
<script>
BotChat.App({
directLine: { secret: direct_line_secret },
user: { id: 'userid' },
bot: { id: 'botid' },
resize: 'detect'
}, document.getElementById("div_of_the_bot"));
</script>
BotChat.App({
directLine:{secret:direct\u line\u secret},
用户:{id:'userid'},
bot:{id:'botid'},
调整大小:“检测”
},document.getElementById(“机器人的div_”);
我不知道为什么会发生这种情况,也不知道最终如何修改ms js脚本,因此我正在尝试找到解决方案。您需要防止默认行为以避免表单提交。例如:
<div id="div_of_the_bot"></div>
<script>
$(document).on("keypress", "#div_of_the_bot input",
function (e) {
if (e.which === 13) {
e.preventDefault();
e.stopPropagation();
}
});
</script>
$(文档)。在(“按键”上,“机器人输入的分割”,
职能(e){
如果(e.which==13){
e、 预防默认值();
e、 停止传播();
}
});
顺便说一句,请查看允许将基于Bot框架的聊天机器人集成到DNN的功能,包括对Skype和Facebook频道的支持。该模块最近由我本人在2018年DNN Connect上展示,并且是开源的。感谢Intelequia的Javier Gracia构建它。您需要防止默认行为以避免表单提交。例如:
<div id="div_of_the_bot"></div>
<script>
$(document).on("keypress", "#div_of_the_bot input",
function (e) {
if (e.which === 13) {
e.preventDefault();
e.stopPropagation();
}
});
</script>
$(文档)。在(“按键”上,“机器人输入的分割”,
职能(e){
如果(e.which==13){
e、 预防默认值();
e、 停止传播();
}
});
顺便说一句,请查看允许将基于Bot框架的聊天机器人集成到DNN的功能,包括对Skype和Facebook频道的支持。该模块最近由我本人在2018年DNN Connect上展示,并且是开源的。感谢来自Intelequia的Javier Gracia建造了它
现在的问题是,当我尝试向我的机器人发送消息时,页面会完全重新加载,因为它是来自某个html表单的提交请求
Send按钮的呈现方式如下所示,对于大多数浏览器,按钮的默认类型是submit。所以,若单击“发送”按钮,它将提交表单数据并重新加载页面
要解决此问题,您可以尝试:
1) 为发送按钮设置type=“button”
$("button.wc-send").attr("type", "button");
2) 将“机器人的div”放在元素外部
3) 修改WebChat的源,然后单击。在Shell.tsx文件中:
private onKeyPress(e: React.KeyboardEvent<HTMLInputElement>) {
if (e.key === 'Enter') {
//prevent the default behavior
e.preventDefault();
this.sendMessage();
}
}
private onClickSend(evt) {
//prevent the default behavior
evt.preventDefault();
this.sendMessage();
}
private onKeyPress(e:React.KeyboardEvent){
如果(e.key=='Enter'){
//防止默认行为
e、 预防默认值();
这是sendMessage();
}
}
专用onClickSend(evt){
//防止默认行为
evt.preventDefault();
这是sendMessage();
}
现在的问题是,当我尝试向我的机器人发送消息时,页面会完全重新加载,因为它是来自某个html表单的提交请求
Send按钮的呈现方式如下所示,对于大多数浏览器,按钮的默认类型是submit。所以,若单击“发送”按钮,它将提交表单数据并重新加载页面
要解决此问题,您可以尝试:
1) 为发送按钮设置type=“button”
$("button.wc-send").attr("type", "button");
2) 将“机器人的div”放在元素外部
3) 修改WebChat的源,然后单击。在Shell.tsx文件中:
private onKeyPress(e: React.KeyboardEvent<HTMLInputElement>) {
if (e.key === 'Enter') {
//prevent the default behavior
e.preventDefault();
this.sendMessage();
}
}
private onClickSend(evt) {
//prevent the default behavior
evt.preventDefault();
this.sendMessage();
}
private onKeyPress(e:React.KeyboardEvent){
如果(e.key=='Enter'){
//防止默认行为
e、 预防默认值();
这是sendMessage();
}
}
专用onClickSend(evt){
//防止默认行为
evt.preventDefault();
这是sendMessage();
}