我正在努力在 WinForms 应用程序中添加 cefsharp。我们的网站使用基本身份验证进行访问,但 CefSharp 不会显示该弹出窗口。我发现了this和this,但 Visual Studio 没有实现该接口并抱怨 AuthDialog 是一个未知类。我来自Java方面,对Winforms中的类不太了解,但我找不到AuthDialog。我究竟做错了什么?
代码 :
bool IRequestHandler.GetAuthCredentials(IWebBrowser browser, bool isProxy, string host, int port,
string realm, string scheme, ref string username, ref string password)
{
//NOTE: If you do not wish to implement this method returning false is the default behaviour
// We also suggest you explicitly Dispose of the callback as it wraps an unmanaged resource.
// shyam - original implemenation.
//callback.Dispose();
//return false;
bool handled = …Run Code Online (Sandbox Code Playgroud) 我们想要在 wpf 应用程序中的基于 chromium 的浏览器中显示网页。在浏览器中显示的网站也应该显示在另一个屏幕上,但没有交互。我想将 cefsharp wpf 浏览器控件和 cefsharp 离屏渲染结合起来。
我可以使用一个 chromium 实例来显示带有 wpf 交互的页面并将当前可见网站导出为图像吗?
感谢你并致以真诚的问候,
西蒙
我正在尝试与 CefSharp 一起使用EvaluateScriptAsPromiseAsync。
它似乎在浏览器中工作,但我在 cefSharp 中得到空结果。
JavaScript:
(async function() {
const result = await $.ajax({ type: 'GET', url: './robots.txt' });
return result;
})();
Run Code Online (Sandbox Code Playgroud)
CSharp代码:
var result = await browser.EvaluateScriptAsPromiseAsync(script);
Debug.Assert(result.Result != null);
Run Code Online (Sandbox Code Playgroud)
完整代码:
public partial class Form1 : Form
{
ChromiumWebBrowser browser;
public Form1()
{
InitializeComponent();
browser = new ChromiumWebBrowser("jquery.com");
this.Controls.Add(browser);
browser.FrameLoadEnd += Browser_FrameLoadEnd;
}
private void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
{
const string script = @"(async function() {
const result = await $.ajax({ type: 'GET', url: './robots.txt' …Run Code Online (Sandbox Code Playgroud) 我已经尝试了很多,但无法使其工作:(。我想在同一个主窗口而不是新窗口中打开第二个窗口。
我尝试遵循但没有运气,也许我做错了什么,因为我不擅长编码:(
https://github.com/cefsharp/CefSharp/issues/600
https://github.com/cefsharp/CefSharp/issues/688
https://www.codeproject.com/Articles/1194609/Capturing-a-pop-up-window-using-LifeSpanHandler-an
您能否帮我找到解决方案,以便无论您在任何网页上单击哪个按钮,它都仅在窗口中打开
using CefSharp;
using CefSharp.WinForms;
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 System.Threading;
using System.Runtime.InteropServices;
using System.Diagnostics;
using Microsoft.Win32;
namespace Nysus
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
ChromiumWebBrowser chrome;
private void Form1_Load(object sender, EventArgs e)
{
CefSettings settings = new CefSettings();
//Initialize
Cef.EnableHighDPISupport();
Cef.Initialize(settings);
chrome = new ChromiumWebBrowser("http://www.google.com");
this.pContainer.Controls.Add(chrome);
chrome.Dock = DockStyle.Fill;
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState …Run Code Online (Sandbox Code Playgroud)这个问题让我困惑了好几天了.我完全无法设置cookie CefSharp.
这是我期望工作的代码块(更多是因为它可以是天真的,不包括显式线程上下文切换):
Application.Current.Dispatcher.Invoke(new Action(() =>
{
var settings = new CefSettings();
settings.CachePath = "cookies";
Cef.Initialize(settings);
Cef.DeleteCookies("", "");
Cef.VisitAllCookies(new CookieVisitor()); // <-- doesn't get called, so assuming we've cleared all the persistent cookies here...
Cef.SetCookiePath("/", false);
Cef.VisitAllCookies(new CookieVisitor()); // <-- ok guess im paranoid...
var isSet = Cef.SetCookie("/", "username",
"testuser", "tovalrsv01", "/",
false, false, false, new DateTime(2020, 1, 1));
Cef.VisitAllCookies(new CookieVisitor()); // <-- isSet is false, and i don't see the cookie that i created in the visited list... …Run Code Online (Sandbox Code Playgroud) 这可能是一个非常简单的问题。我将示例 CefSharp MinimalExample.WinForms 项目复制到一个新目录并重命名为 WinProxy。它构建正常。当我运行它时,我得到了;
mscorlib.dll 中出现类型为“System.IO.FileNotFoundException”的未处理异常附加信息:无法加载文件或程序集“CefSharp.Core.dll”或其依赖项之一。指定的模块无法找到。
与示例目录相比,我缺少此处列出的许多文件https://github.com/cefsharp/CefSharp/wiki/Output-files-description-table-(Redistribution)
我确实有 CefSharp.Core.dll、CefSharp.WinForms.dll 和 CefSharp.dll,它们都在示例项目中被引用。
我如何获得其余的?我尝试复制它们并重建,但我得到了;
mscorlib.dll 中出现类型为“System.IO.FileLoadException”的未处理异常附加信息:无法加载由“CefSharp.Core.dll”导入的过程。
谢谢。
我需要导航到最终包含.pdf文件的网站,我想在本地保存该文件.我正在使用CEFSharp来做到这一点.此站点的性质是,一旦.pdf出现在浏览器中,就无法再次访问它.出于这个原因,我想知道一旦你在浏览器中显示.pdf,有没有办法在缓存中访问该文件的源?
我尝试过实现IDownloadHandler,但是你必须单击嵌入式.pdf上的保存按钮.我试图解决这个问题.
我很好奇 CEF Sharp 是否有可能以某种方式将浏览器的每个实例与其他实例隔离。
我正在创建 4 个浏览器实例。登录实例后,其他 3 个实例也会立即登录。
是否有可能在我们从 Nuget 获得的当前版本中以某种方式实现?
我是新手使用异步方法,所以我觉得我误解了一些东西.我有一个带按钮的WinForms应用程序,当单击该按钮时,会调用异步方法.这必须是异步的,因为我需要对Chromium Web Browser控件进行javascript调用(使用CefSharp).我需要确保此javascript已完成运行并且浏览器已更新,然后继续使用该方法的下一部分.
我基本上试图将整个网页捕获为单个图像.我的方法是使用javascript更新页面上的滚动位置,然后使用Graphics.CopyFromScreen在每个位置截取屏幕截图.这主要是有效的,但偶尔产生的图像将具有错误的网页"块"(例如,第一个位图重复两次).这是我的代码:
// Calculate screen sizes, screenshot spacing etc.
for (int i = 0; i < screenshotCount; i++)
{
int scrollSize = i == 0 ? -PageHeight : (int)browserControlHeight;
string script = "(function() { window.scrollBy(0, " + scrollSize.ToString() + ") })();";
await browser.EvaluateScriptAsync(script);
// Take screenshot, add to list of bitmaps
}
// Combine resulting list of bitmaps
Run Code Online (Sandbox Code Playgroud)
如果我添加以下内容
await Task.Delay(1000);
Run Code Online (Sandbox Code Playgroud)
在EvaluateScriptAsync()调用之后,每次最终图像都是正确的.我正在假设javascript被调用但在截图开始之前没有完成.如果是这种情况,即使添加延迟也可能不起作用(如果javascript运行的时间超过一秒,该怎么办?).
我是否误解了async/await的工作方式?
我正在尝试使用CefSharp访问URL并捕获在加载给定页面期间检索到的特定资源.大概是每个资源的Stream或byte数组.
CefSharp提供了接口IRequestHandler.您可以创建一个实现此接口的类来响应请求/响应事件,但它不以任何方式包含响应主体.