Элемент управления WebBrowser с вкладками - PullRequest
4 голосов
/ 28 сентября 2011

Мне нужно иметь представление вкладки новых версий IE в элементе управления WPF WebBrowser.Как мне этого добиться?

Должен ли я использовать TabControl и хост WebBrowser в каждом элементе вкладки?Я подумал, что мог бы быть какой-то лучший способ иметь представление с вкладками в самом элементе управления WebBrowser, потому что некоторые функции очень удобно управляются самим плагином IE, такие как опция «Открыть во вкладке», «Порядок перетаскивания и упорядочить вкладки»,открыть новую вкладку с URL-адресом по умолчанию и т. д.

Если я пойду по пути 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();

в конструкторе вашего окна.Все элементы управления WebBrowser теперь будут включать опцию Open in Tab, вызываемую правой кнопкой мыши \ wheel click \ Ctrl + Click.

Но это не будет содержать aTabControl в вашем элементе управления WebBrowser.Опция открывает экземпляр браузера IE с соответствующей ссылкой, открытой как Tab.: (

Но, тем не менее, есть и другой способ. Мы можем знать о запросе просмотра с вкладками. Если пользователь пытается вызвать просмотр с вкладками, с помощью элемента управления WebBrowser вызывается событие .Мы можем обработать это событие и на его основе создать новый TabItem с другим элементом управления веб-браузера, который является частью WPF TabControl, который обертывает наш предыдущий элемент управления веб-браузера.

Приветствия.

: -)

Ответы [ 2 ]

1 голос
/ 29 сентября 2011
1 голос
/ 28 сентября 2011

Способ, который вы предложили (поместив элемент управления WebBrowser в TabControl), вероятно, так же хорош, как и сейчас.

Это говорит о том, что вы все равно будете быстро бегать по стенам, потому что элемент управления WebBrowser очень ограничен.Все, что вы можете сделать с ним, это открыть URL, прокрутить и щелкнуть по нему.Вы не получите API для DOM, которые вам понадобятся, если вы хотите предоставить действие контекстного меню, например «Открыть на новой вкладке».

Это также говорит о том, что вы, возможно, захотите взглянуть на Awsomium , который является гораздо более сложным элементом управления веб-браузером, но, к сожалению, может быть не бесплатным для вас .

...