gpt4 book ai didi

C#CEFSharpWCF开发桌面程序实现“同一网站多开”

转载 作者:我是一只小鸟 更新时间:2023-08-01 22:31:06 26 4
gpt4 key购买 nike

孔乙己显出极高兴的样子,将两个指头的长指甲敲着柜台,点头说:“对呀,对呀!CEFSharp,你用过么?访问同一网址实现多开怎么实现?比如我有3个淘宝店,我想同时登录维护,就像传说中的指纹浏览器那样实现cookie和session隔离?” 。

>

前言

大家好,我是44岁的大龄程序员码农阿峰。好久没有开发过桌面软件了,记得还是在2018年开发过winform,这次用wpf实现了CEFSharp访问同一网址实现多开。官方的示例是访问不同的网站可以互不干扰。其实搜索引擎刚开始就帮我搜到了解决办法,不过是我当时没有意识到那些文字对我有帮助。几番趟坑,才得以解决.

1)关键实现 。

直接上代码:

  。

                          
                             /// 
                             <summary> 
                             /// 
                             初始化浏览器集合 
                             /// 
                             </summary> 
                             public 
                             void 
                             InitDictionary() { 
                             foreach 
                             (ChatUser user 
                             in 
                             LocalAccount) { 
                             if 
                             (!
                             Dict.ContainsKey(user.id)) { 
                             #region 
                             初始化ChromiumWebBrowser
                    
                             string 
                             path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, 
                             " 
                             Cache\\Cache_ 
                             " 
                             +
                             user.id.ToString()); 
                             if 
                             (!
                             Directory.Exists(path)) Directory.CreateDirectory(path); 
                             var 
                             setting = 
                             new 
                             RequestContextSettings() { CachePath 
                            =
                             path, PersistSessionCookies 
                            = 
                             true 
                             , PersistUserPreferences 
                            = 
                             true 
                             }; 
                             var 
                             context = 
                             new 
                             RequestContext(setting); 
                             var 
                             cookieManager = context.GetCookieManager(
                             null 
                             ); 
                             // 
                             这样设置的cookie不是全局的,只有当前browser才能访问 
                            
                    cookieManager.SetCookie(
                             " 
                             dxl.cn 
                             " 
                            , 
                             new 
                             Cookie { Name 
                            = $
                             " 
                             cookie{user.nickname} 
                             " 
                             , Value 
                            = $
                             " 
                             cookievalue{user.nickname} 
                             " 
                             , Path 
                            =
                             path }); ChromiumWebBrowser chromeBrowser 
                            = 
                             new 
                             ChromiumWebBrowser() { Address 
                            = config.AppSettings.Settings[
                             " 
                             ChatUrl 
                             " 
                             ].Value, RequestContext 
                            =
                             context, MenuHandler 
                            = 
                             new 
                             NullMenuHandler(), LifeSpanHandler 
                            = 
                             new 
                             LifeSpanHandler(), Visibility 
                            =
                             Visibility.Hidden }; chromeBrowser.JavascriptObjectRepository.Settings.LegacyBindingEnabled 
                            = 
                             true 
                             ; chromeBrowser.JavascriptObjectRepository.Register( 
                             " 
                             bound 
                             " 
                            , obj, 
                             false 
                             ); 
                             #endregion 
                             obj.WebBrowserCallback 
                            +=
                             Obj_WebBrowserCallback; user.msgNum 
                            = 
                             null 
                             ; chromeBrowser.LoadUrl(config.AppSettings.Settings[ 
                             " 
                             ChatUrl 
                             " 
                            ].Value.Replace(
                             " 
                             login 
                             " 
                            , 
                             " 
                             sso 
                             " 
                            ) + $
                             " 
                             ?token={user.token} 
                             " 
                             ); Dict.Add(user.id, chromeBrowser); mainWindow.MainGrid.Children.Add(chromeBrowser); } } AccountCountText 
                            = $
                             " 
                             {LocalAccount.Count}/{config.AppSettings.Settings[ 
                             " 
                            MaxAccountCount
                             " 
                             ].Value} 
                             " 
                             ; 
                             if 
                             (AccountPlusVisibility !=
                             Visibility.Visible) { AccountPlusVisibility 
                            =
                             Visibility.Hidden; } } 
                          
                        

这是ViewModel的代码,下面是页面的 。

                          
                            <Border Grid.Row=
                             " 
                             1 
                             " 
                             BorderBrush=
                             " 
                             Transparent 
                             " 
                             Background=
                             " 
                             #f0f0f0 
                             " 
                             BorderThickness=
                             " 
                             0 
                             " 
                             >
                <Grid x:Name=
                             " 
                             MainGrid 
                             " 
                            />
            </Border>
                          
                        
                        
                          MainGrid就是多个ChromeBrowser的父容器,在切换账户的使用显示当前账户对应的ChromeBrowser其他的隐藏。
                        
                      
                          
                             public 
                             void 
                             ChangeBrowser(
                             object 
                             xaml_obj) { 
                             var 
                             array = xaml_obj 
                             as 
                             object 
                             []; 
                             if 
                             (array != 
                             null 
                             && array.Length == 
                             2 
                             ) { Grid mainGrid 
                            = array[
                             0 
                            ] 
                             as 
                             Grid; ChatUser user 
                            = array[
                             1 
                            ] 
                             as 
                             ChatUser; 
                             if 
                             (user != 
                             null 
                             ) { CurrentBrowser 
                            =
                             Dict[user.id]; 
                             foreach 
                             (
                             var 
                             chromeBrowser 
                             in 
                             mainGrid.Children) { 
                             if 
                             (chromeBrowser ==
                             CurrentBrowser) { ((ChromiumWebBrowser)chromeBrowser).Visibility 
                            =
                             Visibility.Visible; } 
                             else 
                             { ((ChromiumWebBrowser)chromeBrowser).Visibility 
                            =
                             Visibility.Hidden; } } } } } 
                          
                        

以上是按点击切换浏览器的代码.

  。

  。

后记

WPF是数据驱动这真是比较香,做出来的程序对高DPI设备支持也好,可惜就是最后打包出来300多M老板接受不了,一番优化最后实现100M以下,奈何一搞C++的后生动作比我快,程序打包变态的小,程序性能貌似也比我的强。所以悲剧了,我最终二选一被PK下来,我的程序最终也是没有被使用。把关键代码分享出来,希望可以帮到有需求的人.

最后此篇关于C#CEFSharpWCF开发桌面程序实现“同一网站多开”的文章就讲到这里了,如果你想了解更多关于C#CEFSharpWCF开发桌面程序实现“同一网站多开”的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com