带选项卡的WebBrowser控件

时间:2011-09-28 05:48:24

标签: wpf webbrowser-control

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

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

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

THX。

修改

解决方案,以实现如何在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();

在你的Window的constrcutor中。现在,所有WebBrowser控件都会启用Open in Tab右键单击选项\滚轮点击\ Ctrl +单击。

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

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

干杯。

: - )

2 个答案:

答案 0 :(得分:1)

您建议的方式(将WebBrowser控件放入TabControl)可能与它一样好。

有人说,由于WebBrowser控件非常有限,你仍然会很快进入墙壁。所有你可以用它来低音处理,打开一个URL并滚动并单击它。如果要提供“在新选项卡中打开”等上下文菜单操作,则不会获得所需的DOM API。

也有人说,你可能想看看Awsomium这是一个更复杂的网页浏览器控件,但不幸的是might not be free for you

答案 1 :(得分:1)