使用 WPF + Chrome 内核实现 在线客服系统 的复合客服端程序

本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程。本产品已经成熟稳定并投入商用。

免费使用 & 私有化部署免费下载:https://docs.shengxunwei.com/Post/f7bc8496-14ee-4a53-07b4-08d8e3da6269

视频实拍:演示升讯威在线客服系统在网络中断,直接禁用网卡,拔掉网线的情况下,也不丢消息,不出异常。
https://blog.shengxunwei.com/Home/Post/fe432a51-337c-4558-b9e8-347b58cbcd53


对于在线客服与营销系统,客服端指的是后台提供服务的客服或营销人员,他们使用客服程序在后台观察网站的被访情况,开展营销活动或提供客户服务。在本篇文章中,我将详细介绍如何通过 WPF + Chrome 内核的方式实现复合客服端应用程序。

在 1.3 版本之前,客服端程序使用的是 WebBrowser 组件,也就是 IE 内核,随时系统用户的持续增加,我偶尔会收到一些细节问题的反馈,比如在部分版本(萝卜版番茄版毛桃版之类)的 Windows 7 上,客服必须先点击输入框上面的加粗或斜体等按钮,才能激活输入框。经过调查发现是这部分 Windows 7 上 WebBrowser 组件所加载的 IE 内核存在问题,表现出了一些行为的不一致。

为了解决这个问题,从 1.5 版本开始客服程序中的 Web 容器我升级到了最新的 Chrome 内核,除了获得了更好的性能之外,得以使程序在不同版本的 Windows 系统上的表现一致。

1.5 版本之前的用户可以考虑尽快升级。

先看下效果,客服程序界面中的 聊天记录部分、文字输入框部分 使用的是基于 Chrome 内核的 WebView2 进行呈现的。

080331d41e1a306347a5bd5407c87bc9.png

而访客端,则反之向下兼容,在 PC 端兼容到 IE8 :

9e5acec8f3389072907fa364d432ee43.png


要实现这样的效果只需三个步骤

  • 嵌入组件

  • 响应事件

  • 调用 JavaScript 函数

1. 嵌入组件

首先使用 NuGet 将 WebView2 SDK 添加到项目中,然后将 WebView 添加窗口界面。

<Window x:Class="WPF_Getting_Started.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:{YOUR PROJECT NAME}"xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"mc:Ignorable="d"Title="MainWindow"Height="450"Width="800"
><Grid><DockPanel><wv2:WebView2 Name="webView"Source="https://www.microsoft.com"/></DockPanel></Grid>
</Window>

dd4f2f7991022724347351d00b98b14a.png

2. 响应事件

在网页导航期间,WebView2 控件将引发事件。 承载 WebView2 控件的应用侦听以下事件。

  • NavigationStarting

  • SourceChanged

  • ContentLoading

  • HistoryChanged

  • NavigationCompleted

27f0ad6df4085447a2cbcfe6843a6e8c.png

例:修改构造函数以匹配以下代码段并添加 EnsureHttps 函数。

public MainWindow()
{InitializeComponent();webView.NavigationStarting += EnsureHttps;
}void EnsureHttps(object sender, CoreWebView2NavigationStartingEventArgs args)
{String uri = args.Uri;if (!uri.StartsWith("https://")){args.Cancel = true;}
}

3. 调用 JavaScript 函数

可以在运行时使用主机应用将 JavaScript 代码注入控件。 可以运行任意 JavaScript 或添加初始化脚本。 在删除 JavaScript 之前,注入的 JavaScript 适用于所有新的顶级文档和任何子框架。

例如,添加在用户导航到非 HTTPS 网站时发送警报的脚本。 修改 EnsureHttps 函数以将脚本注入到使用 ExecuteScriptAsync 方法的 Web 内容中。

void EnsureHttps(object sender, CoreWebView2NavigationStartingEventArgs args)
{String uri = args.Uri;if (!uri.StartsWith("https://")){webView.CoreWebView2.ExecuteScriptAsync($"alert('{uri} is not safe, try an https link')");args.Cancel = true;}
}

完成

只需要以上简单三个步骤,嵌入组件、响应事件、调用 JavaScript 函数。就可以完成 WPF + Chrome 内核 的复合式应用程序!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

abp框架java,【Net】ABP框架学习之正面硬钢

前言本文介绍另一种学习ABP框架的方法&#xff0c;该方法为正面硬钢学习法。。。我们不去官网下载模板&#xff0c;直接引用DLL&#xff0c;直接使用。WebApi项目创建首先创建一个WebApi项目&#xff0c;结构如下。然后Nuget搜索ABP&#xff0c;安装ABP框架。(我这里安装的是5.…

不同对象的通话是时长​

1 一个专门为某人打造的形容词2 当代人的手机铃声3 “可以吃宵夜吗”“不行” 4 好可爱&#xff01;&#xff01;&#xff01;5 这不是道具&#xff0c;是真的红酒杯里倒着红酒叠在硬币上&#xff01;6 这14个未接电话就很有灵性了&#xff01;7 你觉得以下哪个事件给你的痛苦感…

poj 1088 滑雪 详解

http://poj.org/problem?id1088 这是一道dp入门题&#xff0c;不过我一直没想明白应该怎么dp。今天&#xff0c;在做自己学校oj的算法基础题时看到这题&#xff0c;标注着dp的分类&#xff0c;加上我一直都比较喜欢做dp题&#xff0c;于是我就决心今晚要把这道入门题切了。 题…

python find函数_Python 速学!不懂怎么入门python的小白看这篇就够了!

Python是一种非常流行的脚本语言&#xff0c;而且功能非常强大&#xff0c;几乎可以做任何事情&#xff0c;比如爬虫、网络工具、科学计算、树莓派、Web开发、游戏等各方面都可以派上用场。同时无论在哪种平台上&#xff0c;都可以用 Python 进行系统编程。本文讨论基本的 Pyth…

前端开发的盛宴

想写这篇文章由来已久&#xff0c;目的是想回顾一下基于Web技术的开发技术和流程的变迁&#xff0c;以及其背后的原因或规律。我依然记得&#xff0c;很多年前做出来第一个公司网站时的激动心情&#xff08;加班到晚上&#xff0c;兴奋地在空旷的办公室走来走去&#xff09;&am…

datav本地部署 java,Spring Boot对Spring Data JPA的自动配置

一 点睛Spring Boot对Spring Data JPA的自动配置放置在如下路径&#xff1a;二 源码分析1 JpaRepositoriesAutoConfiguration类分析ConfigurationConditionalOnBean(DataSource.class)ConditionalOnClass(JpaRepository.class)ConditionalOnMissingBean({ JpaRepositoryFactory…

靠拿奖学金完成学业后,博士生为女友放弃年薪30万工作选择留校任教

全世界只有3.14 % 的人关注了爆炸吧知识“相恋八年&#xff0c;一路陪伴。研究生毕业后&#xff0c;博士生决定为女友放弃年薪30万的工作选择留校任教&#xff0c;因为曾和女友约定一起当老师。好的科研爱情&#xff0c;或许就是这样携手前进。索长友是哈尔滨理工大学的博士生&…

小菜学设计模式——观察者模式

2019独角兽企业重金招聘Python工程师标准>>> 背景 上一次去看电影院看电影&#xff0c;半旁边的妹子说只要扫一扫就能免费领取爆米花一份&#xff0c;你说我怎么躲得过妹子的招数呢&#xff1f;所以拿起我的手机&#xff0c;扫一扫&#xff0c;注册会员&#xf…

获取 子文件夹 后缀_CSDN学院第一个Ptython Homework-- 递归统计文件夹大小

作业:通过第一周学习的内容,自主编写一个py文件,能够递归文件夹大小,并将统计后的大小进行格式化输出.作业体现形式:以代码的方式保存成后缀为py的脚本.作业的注意事项:1.文件名命名规范.2.注释清晰.3.运行结果符合预期效果 .思路提示:1.使用python内置的os模块来进行文件相关的…

java 链表逆序 递归,java用递归和非递归实现链表逆序

传统的逆序链表方法是使用三个指针来记录节点的状态&#xff0c;防止链表断裂。Node节点public class Node {private int data;private Node next;public Node(int data){this.data data;next null;}public int getData() {return this.data;}public void setData(int data) …

史上最硬核老师:17年间,拿着菜刀把400个混混送进了哈佛耶鲁麻省!

全世界只有3.14 % 的人关注了爆炸吧知识今天&#xff0c;来给大家介绍一位硬核教师Jaime Escalante——手握杰斐逊奖、自由精神奖&#xff0c;拿着菜刀把400个混混送进了哈佛耶鲁麻省。海梅斯埃斯卡兰特(Jaime Escalante)初出茅庐1930年12月31日&#xff0c;Jaime出生于玻利维亚…

数据库表设计

数据库表设计 分析上述各实体的属性集&#xff0c;从中找出关系的主键&#xff0c;然后用关系式来表示实体(其中下划线的属性为主键)。表4-1至表4-5分别给出了主要表结构各实体的属性如下&#xff1a; 表4-1 admin 表名称 主要字段 数据类型 长度 属性 输入方式 描述 …

抓包写代码模拟怎么减少重复劳动

由于工作需要会经常需要Fiddler抓包Chrome F12抓包然后根据抓包写代码来模拟&#xff0c;一般来说我都是先抓包&#xff0c;打开postman把抓来的包放到postman里面模拟请求然后利用PostMan的生成代码功能大部分的Reponse都是Json&#xff0c;为了方反列化接着要打开一个在线工具…

机械史上最复杂的巅峰之作,这才是最强大脑!

全世界只有3.14 % 的人关注了爆炸吧知识今天我们来认识一下机械史上最强大脑&#xff1a;英国数学家查尔斯巴贝奇&#xff0c;他是可编程计算机的发明者&#xff0c;计算机的先驱。他设计过的计算机器有差分机、分析机和第二个差分机。差分机可谓是机械史最复杂的巅峰之作。在英…

mybatis-plus 会自动增加 order by_python自动撸支付宝基金答题红包

python自动撸支付宝基金答题红包背景在一个套利撸羊毛群里&#xff0c;一群小伙伴每天在不懈地撸支付宝的基金红包&#xff0c;于是自己也加入了撸红包大军。于是就重复地在不同的基金里面&#xff0c;看有没有答题红包&#xff0c;有的话就点进去&#xff0c;回答一个及其容易…

C# WPF文本框TextEdit不以科学计数法显示

01—前言一个float或者double类型的数值&#xff0c;如果小数点后0的个数≥4&#xff0c;在界面上就会自动以科学计数法显示&#xff0c;比如&#xff1a;0.00003会显示成这样但是很多时候我并不希望它这样显示&#xff0c;因为这样不方便编辑&#xff0c;和界面其它数据格式也…

php 获取浏览器时区,获取用户时区

噜噜哒这将使您将时区作为PHP变量。我使用jQuery和PHP编写了一个函数。这是经过测试的&#xff0c;而且确实有效&#xff01;在希望将时区作为变量的PHP页面上&#xff0c;在页面顶部附近有以下代码片段&#xff1a;<?php session_start();$timezone $_SESSION[time];…

女生说话都是加密的

1 年纪轻轻就能过肩摔普京了&#xff0c;真黑带九段&#xff01;&#xff01;&#xff01;2 第一次知道蒜苔本身是这个样子的。。3 一只来自四川的兔子。。4 不敢自己坐电梯的大宝宝5 去睡沙发吧&#xff01;这里没有你的位置了&#xff01;6 虽然是拒绝但这个回复很棒&#xf…

52Exchange 2010升级到Exchange 2013-升级SH站点Ex2010到2013

20、升级SH站点Ex2010到201320.1 准备Exchange服务器两台前端两台后端的标准架构&#xff0c;准备四台EX2013服务器&#xff0c;已经部署成功&#xff0c;安装方法不再赘述进入到EAC中&#xff0c;可以看到所有EX服务器&#xff0c;包括EX2010和EX201320.2 配置SH-Site前端NLB安…

一问就打鼓,一用就糊涂,是我小看它了

听过一个说法&#xff0c;“10 个程序员里&#xff0c;10 个都说学过网络协议&#xff0c;9 个都说懂网络协议。”&#xff0c;但事实上&#xff0c;能真正轻松应对各个大厂校招/社招相关问题的&#xff0c;可能也就两三个。网络协议的不少问题都给人一种似懂非懂的感觉&#x…