Cefsharp不显示图像

时间:2018-08-09 14:28:06

标签: c# wpf cefsharp chromium-embedded

我正在尝试在WPF应用程序中显示图像。

我为每个图像获取一个路径,然后创建一个用于显示图像的html网站。

        StringBuilder sb = new StringBuilder();
        sb.Append("<html><body><img width='100%' height='100%' src='");
        sb.Append(path);
        sb.Append("'/></body></html>");
        code = sb.ToString();
        return code;

我用于生成HTML的代码是否返回有效的HTML代码-我已经通过使用浏览器打开代码来验证了这一点,该浏览器以我想要的方式显示图像。 我正在从名为getHtmlForImage(imagePath)的方法中调用此代码,然后将其加载到浏览器中:

string myHtml = getHtmlForImage(imagePath)
string fakeUrl = "http://interceptMe/"
browser.RegisterResourceHandler(fakeUrl, newMemoryStream(Encoding.UTF8.getBytes(myHtml)));
browser.Load(fakeUrl);

文件路径如下:

"C:\\ProgramData\\ApplicationFolder\\Resources\\IMG1_05.JPG"

,最终的HTML代码如下所示:

<html><body><img width='100%' height='100%' src='C:\\ProgramData\\ApplicationFolder\\Resources\\IMG1_05.JPG'/></body></html>

不显示图像。粘贴到.html并使用标准浏览器打开时,此代码有效。我已经通过向其添加文本来验证该代码已被拦截-然后可以正确显示该代码。用网络上的图像替换给getHtmlForImage()的路径会显示所需的图像,但不会显示本地图像。将RegisterResourceHandler更改为:

browser.RegisterResourceHandler(fakeUrl, new MemoryStream(Encoding.UTF8.GetBytes(myHtml)), ResourceHandler.GetMimeType(".jpg"));

显示先前显示的White box on black background-用于本地图像和基于Web的图像。

使用codemyHtml之类的多个变量的原因是调试。


以下是在新项目中重现该错误的方法:

第1步:新建一个WPF项目,导入CefSharp并像在Github Issue 1714 - variant 1中那样获得对AnyCpu的支持

第2步:添加Chromium Web浏览器,并在MainWindow.xaml中添加一个按钮,如下所示:

<wpf:ChromiumWebBrowser x:Name="browser" Address="www.google.com" Grid.Column="0"></wpf:ChromiumWebBrowser>
    <Button Content="BreakTheBrowser!" Grid.Column="1" Click="Button_Click"></Button>

步骤3:使用以下代码在MainWindow.xaml.cs中启动浏览器:

        public MainWindow() {
        var settings = new CefSettings();
        settings.BrowserSubprocessPath = @"x86\CefSharp.BrowserSubprocess.exe";  
        Cef.Initialize(settings, performDependencyCheck: false, browserProcessHandler: null);
        InitializeComponent();
    }

第4步:创建一个名为getHtmlForImage(string path)的方法,如下所示:

private String getHtmlForImage(string path) {
        string code;
        StringBuilder sb = new StringBuilder();
        sb.Append("<html><body><img width='100%' height='100%' src='");
        sb.Append(path);
        sb.Append("'/></body></html>");
        code = sb.ToString();
        return code;
    }

第5步:向按钮中添加一个button_click事件,然后在该点击事件中加载图片:

private void Button_Click(object sender, RoutedEventArgs e) {
        string path = "https://www.catster.com/wp-content/uploads/2017/11/A-Siamese-cat.jpg";
        string myHtml = getHtmlForImage(path);
        string fakeUrl = "http://interceptMe/";
        browser.RegisterResourceHandler(fakeUrl, new MemoryStream(Encoding.UTF8.GetBytes(myHtml)), ResourceHandler.GetMimeType(".jpg"));
        browser.Load(fakeUrl);
    }

步骤6:启动应用程序,然后单击按钮。应该出现在黑色背景上臭名昭著的白色框。


其他信息:

  • Cefsharp版本:65.0.0,昨天已与NuGet一起安装
  • Windows 10(64位)
  • 使用Visual Studio Enterprise 2017 15.7.5版
  • .NET Framework版本4.7.03.056

0 个答案:

没有答案