2018年4月21日,于石門。
實驗目的
在自助一體機項目中使用了CefSharp組件,前方兄弟發(fā)現(xiàn)使用JavaScript調(diào)用Confirm彈窗的時候按鈕不能顯示中文,而是現(xiàn)實的是英文,責成我來搞定,經(jīng)過一番努力問題解決。
實驗步驟
1、增加一個類(JsDialogHandler.cs)重寫JsDialog的接口
using System.Windows.Forms;
using CefSharp;
namespace Asm.AutoService
{
class JsDialogHandler : IJsDialogHandler
{
public void OnDialogClosed(IWebBrowser browserControl, IBrowser browser)
{
}
public bool OnJSBeforeUnload(IWebBrowser browserControl, IBrowser browser, string message, bool isReload, IJsDialogCallback callback)
{
return true;
}
public bool OnJSDialog(IWebBrowser browserControl, IBrowser browser, string originUrl, CefJsDialogType dialogType, string messageText, string defaultPromptText, IJsDialogCallback callback, ref bool suppressMessage)
{
switch (dialogType)
{
case CefJsDialogType.Alert:
MessageBox.Show(messageText, "自助一體機");
suppressMessage = true;
return false;
case CefJsDialogType.Confirm:
var dr = MessageBox.Show(messageText, "自助一體機", MessageBoxButtons.YesNo);
if (dr == DialogResult.Yes)
{
callback.Continue(true, string.Empty);
suppressMessage = false;
return true;
}
else
{
callback.Continue(false, string.Empty);
suppressMessage = false;
return true;
}
case CefJsDialogType.Prompt:
MessageBox.Show("系統(tǒng)不支持prompt形式的提示框", "自助一體機");
break;
default:
break;
}
return false;
}
public void OnResetDialogState(IWebBrowser browserControl, IBrowser browser)
{
}
}
}
2、在實例化CefSharp的地方引用
/**MainForm.cs**/
private void MainForm_Load(object sender, EventArgs e)
{
/**省略部分代碼**/
//創(chuàng)建瀏覽器
browser = new ChromiumWebBrowser(path)
{
//禁止右鍵菜單
MenuHandler = new ContextMenuHandler(),
ContextMenu = null,
//控制窗口彈出方式
LifeSpanHandler = new LifeSpanHandler(),
//重寫彈窗
JsDialogHandler = new JsDialogHandler()
};
/**省略部分代碼**/
}
3、其它可能會影響的修改
經(jīng)過試驗1~2兩步完成后就解決了當前問題,但是在原有代碼中缺少中文環(huán)境相關支持的設定,這里索性也都加上。
/**MainForm.cs**/
/// <summary>
/// 初始化瀏覽器設置
/// </summary>
private void InitChrominum()
{
var setting = new CefSettings
{
LogSeverity = LogSeverity.Verbose,
Locale = "zh-CN",
AcceptLanguageList = "zh-CN"
};
Cef.Initialize(setting);
}