标签: cefsharp

从CefSharp 1中的javascript调用.Net - wpf

我刚学习C#WPF并且已经成功实现了CefSharp,如何从javascript中调用.NET函数,这是在CefSharp中加载的?

javascript c# cefsharp

11
推荐指数
2
解决办法
2万
查看次数

如何在CefSharp中保存cookie

我是CefSharp的新手.上周我在C#中使用CefSharp构建了我的第一个小程序.这是一个分屏程序.在一个分区我加载了Tweetdeck.它工作正常,但Tweetdeck不存储cookie.每次我启动程序时,我都必须登录.有没有办法保存cookie?

var browser1 = new CefSharp.WinForms.ChromiumWebBrowser("https://tweetdeck.twitter.com/")
        {
            Dock = DockStyle.Fill,
        };
splitContainer1.Panel1.Controls.Add(browser1);
Run Code Online (Sandbox Code Playgroud)

c# cefsharp

11
推荐指数
2
解决办法
1万
查看次数

在CefSharp中使用本地构建的网页

我在Winform中创建了一个CefSharp浏览器,我需要在内存中动态构建一个HTML页面,然后让CefSharp渲染它.

理想情况下,我想在构造函数中传递一个包含HTML的字符串,但它需要一个URL.答案可能是否定的,但是有一个指令可以预先添加字符串让CefSharp知道它是一个包含网页的字符串吗?然后CefSharp会创建一个临时文件?

如果没有,Chromium临时文件夹设置为何处?如果我将文件写入那里然后将其作为完全限定的路径传递,它会工作吗?我知道Chrome会支持像file:///Users/dmacdonald/Documents/myFile.htm这样的URL,但是如果使用临时结构则不知道如何形成URL.

这是我的新代码,但我的浏览器对象没有ResourceHandler属性.我看到它有一个ResourceHandlerFactory

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CefSharp.WinForms;
using CefSharp;


namespace DanCefWinForm
{
    public partial class Form1 : Form
    {
        public const string TestResourceUrl = "http://maps/resource/load";

        public Form1()
        {
            InitializeComponent();


        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ChromiumWebBrowser browser = new ChromiumWebBrowser("http://maps/resource/load")
            {
                Dock = DockStyle.Fill,
            };

            var handler = browser.ResourceHandler;

           browser.Location = new Point(20, 20);
           browser.Size = new Size(100, 100);
            this.Controls.Add(browser);
        } …
Run Code Online (Sandbox Code Playgroud)

c# chromium-embedded cefsharp

11
推荐指数
2
解决办法
2万
查看次数

用cefsharp winforms下载文件

我正在尝试使用cefsharp winforms从我的应用程序下载一些文件(图像,文件音频或其他内容).我读了其他任何帖子,但似乎没什么用.你有没有示例代码向我展示如何实现cefsharp的下载程序?

当然,当我现在尝试下载一些文件时,没有任何反应.

谢谢

c# download winforms chromium-embedded cefsharp

11
推荐指数
3
解决办法
1万
查看次数

使用CefSharp WPF在C#上执行JavaScript会导致错误

每当我尝试使用CefSharp(Stable 57.0)通过C#执行JavaScript时,我都会收到错误消息.我只是尝试执行警报功能,所以我可以确保它可以工作,然后用我自己的函数测试它.但是,我似乎在尝试这样做时遇到错误.

public partial class WebBrowserWindow : Window
{
    public WebBrowserWindow()
    {
        InitializeComponent();
        webBrowser.MenuHandler = new ContextMenuHandler();
        webBrowser.RequestHandler = new RequestHandler();
    }

    //Trying to execute this with either method gives me an error.
    public void ExecuteJavaScript()
    {
        //webBrowser.GetMainFrame().ExecuteJavaScriptAsync("alert('test')");

        //webBrowser.ExecuteScriptAsync("alert('test');");
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试了两种执行脚本的方法.

第一个:

webBrowser.GetMainFrame().ExecuteJavaScriptAsync("alert('test')");
Run Code Online (Sandbox Code Playgroud)

给我这个错误:

在此输入图像描述

第二:

webBrowser.ExecuteScriptAsync("alert('test');");
Run Code Online (Sandbox Code Playgroud)

给我这个错误:

在此输入图像描述

我的目标是创建一个可以在我的CefSharp浏览器中执行JavaScript函数的C#函数.

我尝试了很多链接/引用,堆栈溢出并没有那么多.我还阅读了CefSharp的FAQ,找不到任何允许我通过C#随意执行JavaScript的简单示例.

另外,我已经验证了加载Frame的事件(它完成加载)和卸载(它没有卸载),如果webbrowser为null(它不是),以及来自:的消息:

webBrowser.GetMainFrame().ExecuteJavaScriptAsync("alert('test')");
Run Code Online (Sandbox Code Playgroud)

仍会导致第一个错误发生.

我测试了GetMainFrame().它总是返回null.总是.无论我等待多久,或者我检查的条件.

重要

我忘记添加一条关键信息,我的项目中有2个程序集.它们都编译成单独的可执行文件:

Helper.exe Main.exe

main.exe有一个窗口"CallUI",当单击一个按钮时,它会执行我创建的"ExecuteJavaScript()"方法,它位于我的窗口"BrowserWindow"中.CallUI窗口在Helper.exe中声明并初始化.

所以基本上我试图使用单独的程序打开一个窗口,单击一个调用该方法并执行javascript的按钮.所以我认为因为它们是不同的进程,它告诉我浏览器是null.但是,当我在Main.exe中完成所有操作时,它可以正常工作.是否有一种解决方法允许我使用单独的进程从Helper.exe创建窗口并从Main.exe执行Javascript?

javascript c# wpf cefsharp

11
推荐指数
1
解决办法
3104
查看次数

在c#中更改"覆盖高DPI缩放行为"

我们在WinForm(CefSharp控件)中有一个控件,当用户屏幕在Windows上设置为125%时,它会受到图形工件的影响.它不仅仅是控制,独立Chrome在某种程度上做到了.我们能够修复工件的唯一方法是更改​​下图所示的exe设置.有没有办法在代码中更改它?

在此输入图像描述

编辑:这不是重复.制作应用程序DPI意识与DPI缩放不一样

c# registry dpi cefsharp

10
推荐指数
1
解决办法
1994
查看次数

不显示或呈现CefSharp WPF Web浏览器

我是CefSharp的新手我已经创建了一个类库项目并引用了CefSharp库来呈现Web浏览器,但是我遇到了一些显示Web浏览器的问题.请找到确切的代码

WebBrowser_test1:

 public partial class ChildWidget : Window
    {
        public CefSharp.Wpf.ChromiumWebBrowser webView;
        public Widget()
        {
            InitializeComponent();
            CefSharp.CefSettings settings = new CefSharp.CefSettings();
            settings.PackLoadingDisabled = true;
            if (CefSharp.Cef.Initialize(settings))
            {
                webView = new CefSharp.Wpf.ChromiumWebBrowser();
                main_grid.Children.Add(webView);
                webView.Address = "http://www.google.co.uk";
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在另一个项目中引用了这个库(dll)

public MainWindow()
        {
            InitializeComponent();
            Button newbutton = new Button();
            newbutton.Width = 50;
            main_grid.Children.Add(newbutton);
            newbutton.Click += ButtonClick;
        }

        private void ButtonClick(object sender, RoutedEventArgs e)
        {
            try
            {
                Webbrowser_test1.ChildWidget childWidget = new Widget();
                childWidget.Show();
            }
            catch (Exception)
            {

                throw;
            }
          }
Run Code Online (Sandbox Code Playgroud)

现在点击按钮,我将打开(WebBrowser_test1)子窗口小部件,我将在其中显示Web浏览器..当窗口打开时,它显示为空白.

如果我遗漏任何东西,请告诉我

c# webview cefsharp

8
推荐指数
2
解决办法
1万
查看次数

CefSharp在任何文档加载/处理之前注入Javascript

对于我正在处理的项目,我需要在任何网页文档处理开始之前注入javascript.这可以通过WebBrowser组件轻松实现,但我在使用CefSharp时遇到了困难.

这是问题的简化,网页需要"InjectedObject"才能运行.在文档的最顶部调用未注入的网页,或者在处理文档之前进行评估/执行将导致:

===== html示例输出失败=====

isObjectPresent?

=====

我需要在哪里显示网页:

===== html示例输出成功=====

isObjectPresent?

真正

=====

<html>
  <head>
    <script>
      isObjectPresent = typeof InjectedObject == "object";
    </script>
  </head>
  <body>
    <p>isObjectPresent?</p>
    <div id="result"></div>
    <script>
      document.getElementById("result").innerHTML = isObjectPresent;
    </script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

查看所有可用的建议将表明我应该使用LoadingStateChanged()或FrameLoadEnd()来注入脚本,即:

public void OnFrameLoadEnd(object sender, FrameLoadEndEventArgs args) {
  if (args.Frame.IsMain) {
    args.Frame.ExecuteJavascriptAsync("window.InjectedObject = {};");
  }
}
Run Code Online (Sandbox Code Playgroud)

然而,我尝试过的所有迭代,甚至使用FrameLoadStart,都导致在文档开始处理后出现插入的javascript.是否有任何真正的javascript注入示例确保它在文档处理开始之前发生.(确保避免竞争条件/时间问题).

作为我想模仿的WebBrowser组件行为的一个例子是:

private void uiWebBrowser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) 
{
  var browser = (WebBrowser)sender;
  var document = browser.Document as HTMLDocument;
  var head = document.getElementsByTagName("head").Cast<HTMLHeadElement>().First();
  if (head != null)
  {
    var …
Run Code Online (Sandbox Code Playgroud)

javascript c# javascript-injection cefsharp

8
推荐指数
1
解决办法
5402
查看次数

Cefsharp如何获取当前URL地址?C#

我想获取当前地址并将其放入文本框中。我找到了这个链接,但似乎无法理解任何内容。

http://cefsharp.github.io/api/57.0.0/html/P_CefSharp_WinForms_ChromiumWebBrowser_Address.htm

我真的很感激某人的代码片段。这太痛苦了。我正在使用WFA。

c# chromium cefsharp

8
推荐指数
1
解决办法
2万
查看次数

cefsharp等待页面加载,winforms C#

首先,我是C#的新手并且学习Cefsharp + javascript,所以请尝试评论你认为必要的任何解决方案,这将拯救我提出愚蠢的问题.

我试图等到页面完成加载Cefsharp来执行我的代码,我已经尝试了在其他stackoverflow问题/ github上找到的几个解决方案,但没有去...

我认为解决方案是"NavStateChanged",但我得到一个C#错误:"ChromiumWebBrowser不包含'NavStateChanged'的定义"

任何人都可以指出我正确的方向或给我一个片段?我不是要求你为我写完整件事,但我真的迷失在这里,我一下子学习C#,Cefsharp和javascript,而且......压倒性的.

这是我在网上寻找解决方案时找到的代码,它也匹配了很多github引用,但似乎不起作用:/

EventHandler<NavStateChangedEventArgs> handler = null;
handler = (sender, args) = > {

    //TODO : show a loading gif until the page load completes

    //Wait for while page to finish loading not just the first frame
    if (!args.IsLoading)
    {
        chromeBrowser.NavStateChanged -= handler;

        MessageBox.Show("The page has completed loading", "Load completed", 
                        MessageBoxButtons.OK);
        //TODO : once load complete show the actual page
    }
Run Code Online (Sandbox Code Playgroud)

c# pageload chromium-embedded cefsharp

7
推荐指数
1
解决办法
1万
查看次数