2011-09-28 66 views
4

我需要在WPF WebBrowser控件中擁有新IE版本的選項卡視圖。我怎樣才能實現它?使用Tabs的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(); 

在窗口的constrcutor。所有WebBrowser控件現在將啓用Open in Tab右鍵單擊選項\ wheel click \ Ctrl + Click。

但是,這不會在您的WebBrowser控件中託管aTabControl。該選項打開IE瀏覽器實例,打開相關鏈接作爲Tab。 :(

但無論如何還有另一種方式,我們就可以知道標籤瀏覽請求。如果用戶試圖調用標籤式瀏覽,一個eventWebBrowser控制提出,我們可以處理此事件,並基於該創建一個新的TabItem在它的另一個Web瀏覽器控件這是一個WPF TabControl它包裝我們以前的Web瀏覽器控件的一部分。

乾杯。

:-)

回答

1
+0

Thx man。這確實有助於實現右鍵點擊功能的選項卡式選項的可用性。:-)查看**編輯**題。 –

1

你建議的方式(把WebBrowser控制升到TabControl)可能就像它得到的那樣好。

這樣說吧,你仍然會很快撞上牆壁,因爲WebBrowser控件非常有限。所有你可以用它卑鄙地做,打開一個URL並滾動並點擊它。如果您希望提供上下文菜單操作,如「在新選項卡中打開」,則不會爲您需要的DOM獲取API。

這也beeing說,你可能想看看Awsomium這是一個更復雜的網絡瀏覽器控制,但不幸的是might not be free for you

+0

是啊,我看到Awsomium Web瀏覽器控件...是它太糟糕了它不是免費的。 :( –

+0

這對於非商業用途以及年收入低於10萬的公司是免費的。 – bitbonk