【问题标题】:WebBrowser Control with Tabs带标签的 WebBrowser 控件
【发布时间】:2011-09-28 05:48:24
【问题描述】:

我需要在 WPF WebBrowser 控件中拥有新 IE 版本的选项卡视图。我怎样才能实现它?

我是否必须在每个选项卡项中使用TabControl 和托管WebBrowser 控件?我认为可能有一些更好的方法可以在WebBrowser 控件本身中使用选项卡式视图,因为某些功能由 IE 插件本身非常方便地管理,例如“在选项卡中打开”选项、“拖动和排列选项卡顺序”、使用默认网址等打开新标签。

如果我采用TabControl 的方式,那么我将不得不重新创建所有这些功能。欢迎任何狂野的投入。 :-)

谢谢。

编辑

实现如何在WebBrowser 控件中启用“在选项卡中打开”右键单击选项的解决方案。

using System;
using System.Runtime.InteropServices;

namespace TabbedBrowsing
{
    public enum INTERNETFEATURELIST
    {
        FEATURE_OBJECT_CACHING = 0,
        FEATURE_ZONE_ELEVATION = 1,
        FEATURE_MIME_HANDLING = 2,
        FEATURE_MIME_SNIFFING = 3,
        FEATURE_WINDOW_RESTRICTIONS = 4,
        FEATURE_WEBOC_POPUPMANAGEMENT = 5,
        FEATURE_BEHAVIORS = 6,
        FEATURE_DISABLE_MK_PROTOCOL = 7,
        FEATURE_LOCALMACHINE_LOCKDOWN = 8,
        FEATURE_SECURITYBAND = 9,
        FEATURE_RESTRICT_ACTIVEXINSTALL = 10,
        FEATURE_VALIDATE_NAVIGATE_URL = 11,
        FEATURE_RESTRICT_FILEDOWNLOAD = 12,
        FEATURE_ADDON_MANAGEMENT = 13,
        FEATURE_PROTOCOL_LOCKDOWN = 14,
        FEATURE_HTTP_USERNAME_PASSWORD_DISABLE = 15,
        FEATURE_SAFE_BINDTOOBJECT = 16,
        FEATURE_UNC_SAVEDFILECHECK = 17,
        FEATURE_GET_URL_DOM_FILEPATH_UNENCODED = 18,
        FEATURE_TABBED_BROWSING = 19,
        FEATURE_SSLUX = 20,
        FEATURE_DISABLE_NAVIGATION_SOUNDS = 21,
        FEATURE_DISABLE_LEGACY_COMPRESSION = 22,
        FEATURE_FORCE_ADDR_AND_STATUS = 23,
        FEATURE_XMLHTTP = 24,
        FEATURE_DISABLE_TELNET_PROTOCOL = 25,
        FEATURE_FEEDS = 26,
        FEATURE_BLOCK_INPUT_PROMPTS = 27,
        FEATURE_ENTRY_COUNT = 28 
    }

    public enum DWFLAGS
    {
        SET_FEATURE_ON_THREAD = 0x00000001,
        SET_FEATURE_ON_PROCESS = 0x00000002,
        SET_FEATURE_IN_REGISTRY = 0x00000004,
        SET_FEATURE_ON_THREAD_LOCALMACHINE = 0x00000008,
        SET_FEATURE_ON_THREAD_INTRANET = 0x00000010,
        SET_FEATURE_ON_THREAD_TRUSTED = 0x00000020,
        SET_FEATURE_ON_THREAD_INTERNET = 0x00000040,
        SET_FEATURE_ON_THREAD_RESTRICTED = 0x00000080
    }

    public static class IEFeatureSetBehavior
    {
        [DllImport("urlmon.DLL")]
        public static extern Int32 CoInternetSetFeatureEnabled(INTERNETFEATURELIST featureEntry, Int32 dwFlags, bool fEnable);

        [DllImport("urlmon.DLL")]
        public static extern Int32 CoInternetIsFeatureEnabled(INTERNETFEATURELIST featureEntry, Int32 dwFlags);

        public static void EnabledTabbedBrowsing()
        {
            var lr = 0;
            var featureToEnable = INTERNETFEATURELIST.FEATURE_TABBED_BROWSING;
            if (CoInternetSetFeatureEnabled(featureToEnable, (Int32)DWFLAGS.SET_FEATURE_ON_PROCESS, true) == 0)
            {
                if (CoInternetIsFeatureEnabled(featureToEnable, (Int32)DWFLAGS.SET_FEATURE_ON_PROCESS) != 0)
                {
                    lr = 2;
                }
                else
                {
                    lr = 1;
                }
            }
        }
    }
}

我们只需要调用

IEFeatureSetBehavior.EnabledTabbedBrowsing();

在你的窗口的构造器中。所有WebBrowser 控件现在都将启用Open in Tab 右键单击​​选项\ 滚轮单击\ Ctrl + 单击。

但这不会在您的 WebBrowser 控件中托管 aTabControl。该选项将打开 IE 浏览器实例,并将相关链接作为选项卡打开。 :(

但是还有另一种方法。我们可以知道标签式浏览请求。如果用户尝试调用选项卡式浏览,event 将由 WebBrowser 控件引发。我们可以处理此事件,并在此基础上创建一个新的 TabItem,其中包含另一个 Web 浏览器控件,它是 WPF TabControl 的一部分,它包装了我们以前的 Web 浏览器控件。

干杯。

:-)

【问题讨论】:

    标签: wpf webbrowser-control


    【解决方案1】:

    【讨论】:

    • 谢谢人。这确实有助于在右键单击功能上启用选项卡式选项。 :-) 请参阅 Edited 问题。
    【解决方案2】:

    您建议的方式(将WebBrowser 控件放入TabControl)可能已经达到了最佳效果。

    话虽如此,您仍然会很快陷入困境,因为 WebBrowser 控件非常有限。基本上你能做的就是打开一个 URL 并滚动并单击它。如果您想提供诸如“在新选项卡中打开”之类的上下文菜单操作,您不会获得所需的 DOM API。

    也就是说,您可能想看看Awsomium,它是一个更复杂的网络浏览器控件,但不幸的是might not be free for you

    【讨论】:

    • 是的,我看到了 Awsomium 网络浏览器控件……是的,它太糟糕了,它不是免费的。 :(
    • 它对于非商业用途和年收入低于 10 万的公司是免费的。
    猜你喜欢
    • 2020-04-14
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    相关资源
    最近更新 更多