Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何阻止在DotNetBrowser中加载远程内容?_Wpf_Email_Privacy_Dotnetbrowser - Fatal编程技术网

Wpf 如何阻止在DotNetBrowser中加载远程内容?

Wpf 如何阻止在DotNetBrowser中加载远程内容?,wpf,email,privacy,dotnetbrowser,Wpf,Email,Privacy,Dotnetbrowser,我正在使用WPF电子邮件应用程序中的dotnebrowser来显示电子邮件内容。我想阻止每个远程内容和远程图像。我使用它来检查是否可以正确阻止远程内容 我查看了dotnebrowser的文档,发现可以使用BrowserPreferences设置禁用两种功能。我使用以下代码禁用了所有内容: BrowserPreferences pref = new BrowserPreferences { ImagesEnabled = false, JavaScriptEnabled = fal

我正在使用
WPF
电子邮件应用程序中的
dotnebrowser
来显示电子邮件内容。我想阻止每个远程内容和远程图像。我使用它来检查是否可以正确阻止远程内容

我查看了
dotnebrowser
的文档,发现可以使用
BrowserPreferences
设置禁用两种功能。我使用以下代码禁用了所有内容:

BrowserPreferences pref = new BrowserPreferences {
    ImagesEnabled = false,
    JavaScriptEnabled = false,
    PluginsEnabled = false,
    WebAudioEnabled = false,
    ApplicationCacheEnabled = false,
    LocalStorageEnabled = false,
    AllowDisplayingInsecureContent = false,
    AllowRunningInsecureContent = false,
    ...
};

wpfBrowserView.Browser.Preferences = pref;
wpfBrowserView.Browser.LoadHTML(myHtml);
但这只阻止了两种可能的有害物质。然后我设置了一个自定义的
LoadHandler
,在这里我可以防止更多的情况:

MyBrowserLoadHandler loadHandler = new MyBrowserLoadHandler();
loadHandler.Load += args => {
    // just don't allow to load the content
};
wpfBrowserView.Browser.LoadHandler = loadHandler;
这还不够,因为其中两个(链接预取
CSS链接标记
)仍然失败


我不想对电子邮件的html进行静态分析来处理这些情况,所以我正在寻找一种更简单的方法。例如,在Android的WebView中,只需调用两个方法(
setBlockNetworkLoads(true)
setBlockNetworkImage(true)
),它就完成了整个过程。在
dotnebrowser
中有这样的解决方案吗?

我终于找到了解决方案。我放弃了我在上面发布的所有尝试,并尝试了另一种方法。
dotnebrowser
有一个配置文件,您可以设置允许加载和不允许加载的资源类型。这是我的密码:

var network = wpfBrowserView.Browser.Context.NetworkService;
var resourceHandler = new MyResourceHandler();
resourceHandler.Load += args => {
    ResourceType resource = args.Parameters.ResourceType;

    switch (resource) {
        case ResourceType.PREFETCH:
        case ResourceType.IMAGE:
        case ResourceType.MEDIA:
        case ResourceType.OBJECT:
        case ResourceType.STYLESHEET:
        case ResourceType.FONT_RESOURCE:
        case ResourceType.SUB_RESOURCE:
            return false;
        default:
            // allow to load for the others
            return true;
    }
};

network.ResourceHandler = resourceHandler;
和自定义资源处理程序:

public class ResourceLoadEventArgs {
    public ResourceParams Parameters { get; set; }
}

public delegate bool ResourceLoadHandler(ResourceLoadEventArgs args);

public class MyResourceHandler : ResourceHandler {
    public event ResourceLoadHandler Load;

    public bool CanLoadResource(ResourceParams parameters) {
        return Load?.Invoke(new ResourceLoadEventArgs { Parameters = parameters }) ?? true;
    }
}
因此,在将html加载到浏览器视图之前添加这段代码,会导致通过电子邮件隐私测试仪中的每个测试。然后,您可以为用户放置一个按钮来加载远程内容,当用户单击它时,您可以允许每个资源