CefSharp重寫Alert和Confirm對話框

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);
        }
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,023評論 25 709
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內(nèi)部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,679評論 18 399
  • “來來來,大家都過來吃蛋糕,今天王副所長過生日,我們一起祝他生日快樂。哎,奶油不要掉到案卷,吃完了還要干活哪”1月...
    緣是你的俊閱讀 267評論 0 1
  • 我最近對時間飛逝焦慮到令人發(fā)指的地步。無論做什么,我總能被突然發(fā)覺時間飛快而心跳。比如我今天去看牡丹花,出去時,我...
    夏筠若閱讀 1,138評論 0 0
  • 我的耐心有限,抗打擊能力也不強,幾次不如意之后,真的只想長舒一口氣,怎么能這樣,為什么就我偏偏這樣,真的是天有不公...
    sunme閱讀 274評論 3 1

友情鏈接更多精彩內(nèi)容