2016-06-15 16 views
1

要件:それぞれ異なるIEセッションを使用する2つの埋め込まれた.Net WebBrowserコントロールを用意する。サーバーページはユーザーのセッションを設定します。これはメモリに保存され、複数のWebブラウザコントロール(タブと同様)に共有されます.Net WebBrowserコントロールを新しいセッション/プロセスを開始するように強制する方法

標準のIEでこれを処理する方法は、ファイル>新規セッションを選択することです。これは、別のプロセスで新しいIEウィンドウを開くので、メモリ内で同じセッションを共有しません。

私ができることは、最初のWebブラウザーのセッションを終了して新しいセッションを開始することだけです2番目のWebブラウザーで。しかし、これは私が要件は、私が

ブラウザセッションの終了が途中以下で行われるべきではないと言われます最初のセッションを失うことを意味

[DllImport("wininet.dll", SetLastError = true)] 
    private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength); 

    private const int INTERNET_OPTION_END_BROWSER_SESSION = 42; 

InternetSetOption(IntPtr.Zero, INTERNET_OPTION_END_BROWSER_SESSION, IntPtr.Zero, 0); 

は、誰もがWebブラウザーコントロールは、それぞれを単離することができる方法の任意のアイデアを持っています別のセッション/プロセスで?

答えて

0

現在の方法では使用できませんWebBrowser作品。 WebBrowserのすべてのインスタンスで1つのセッションを共有します。

複数のアクティブな接続(少なくともCefSharp doesn't)をサポートする別のWebブラウザコントロールがあるかどうかはわかりませんが、その方法を見つけることをおすすめします。

+0

私は現在、Awesomiumを使用しています。 WebSessionsを個別にキャッシュできるように見えますが、うまくいけばすぐにそれを把握します – JAnton

+0

がんばろう。 –

0

編集:私はここに答えました。 Awesomiumはこれを行うことができますが、IEはありません

現在の.Net WebBrowserではこれを行うことはできません。私はAwesomiumを使ってこれを達成できました。 .Netサンプルをドローロードしてタブ付きブラウザを変更した場合は、新しいWebControlとそれに関連付けられた新しいWebSessionを追加することでこれをテストできます。ちょうど私の例では(すなわち.Cache2)

を新しいセッションの新しいデータパス・ディレクトリを構成している私は、次のように編集した:修正

<awe:WebSessionProvider 
    x:Key="GlobalSession2" 
    x:Shared="False" 
    DataPath=".\Cache2" 
    Preferences="{x:Static local:MainWindow.WebPreferences}"/> 

はTabView.xamlで新しいWebSessionを追加しました新しい行を追加する行:

<Grid.RowDefinitions> 
          <RowDefinition Height="Auto" /> 
          <RowDefinition Height="300"/> 
          <RowDefinition Height="300"/> 
         </Grid.RowDefinitions> 

は、右の最初のWebBrowserコントロールのヴェローナとその周辺の終了後に新しいWebBrowserコントロール(およびsorroundingボーダーなど)を追加しました。これは、以前に追加された新しいセッションを使用しています。

<Grid x:Name="browserContainer2" Grid.Row="2"> 
          <Border 
           x:Name="browserBorder2" 
           BorderThickness="0,1,0,0" 
           BorderBrush="{DynamicResource ControlBorderBrush}" 
           Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"> 
           <awe:WebControl 
            x:Name="PART_Browser2" 
            Source="{Binding Source2, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}" 
            NativeView="{Binding NativeView, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}" 
            IsSourceView="{TemplateBinding IsSourceView}" 
            IsEnabled="{TemplateBinding IsSelected}" 
            WebSession="{Binding Source={StaticResource GlobalSession}}" /> 
          </Border> 
          <ui:MetroProgressBar 
           Grid.ZIndex="100" 
           VerticalAlignment="Top" 
           HorizontalAlignment="Stretch" 
           Margin="0,3" 
           IsIndeterminate="{Binding IsNavigating, ElementName=PART_Browser}" 
           Visibility="{Binding IsNavigating, ElementName=PART_Browser, Converter={StaticResource BooleanToVisibilityConverter}}"/> 
          <Grid 
           x:Name="statusGrid2" 
           Height="25" 
           VerticalAlignment="Bottom" 
           Opacity="0.8"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition /> 
            <ColumnDefinition Width="Auto" /> 
           </Grid.ColumnDefinitions> 
           <Border 
            x:Name="statusBox2" 
            Background="{DynamicResource ControlBackgroundBrush}" 
            BorderBrush="{DynamicResource ControlBorderBrush}" 
            BorderThickness="0,1,1,0" 
            CornerRadius="0,5,0,0" 
            IsHitTestVisible="False"> 
            <TextBlock 
             x:Name="targetURLBlock2" 
             VerticalAlignment="Center" 
             Margin="5,0" 
             IsHitTestVisible="False" 
             Focusable="False" 
             Text="{Binding TargetURL, ElementName=PART_Browser, Converter={StaticResource UrlConverter}}" 
             TextTrimming="CharacterEllipsis"/> 
           </Border> 
           <Grid 
            x:Name="zoomBox2" 
            Grid.Column="1" 
            Margin="5,0,0,0"> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="Auto" /> 
             <ColumnDefinition Width="Auto" /> 
            </Grid.ColumnDefinitions> 
            <Border 
             Grid.ZIndex="-100" 
             Grid.ColumnSpan="2" 
             Background="{DynamicResource ControlBackgroundBrush}" 
             BorderBrush="{DynamicResource ControlBorderBrush}" 
             BorderThickness="1,1,0,0" 
             CornerRadius="5,0,0,0" 
             IsHitTestVisible="False"/> 
            <TextBlock 
             VerticalAlignment="Center" 
             Margin="7,0" 
             Text="Zoom:"/> 
            <Slider 
             x:Name="zoomBar2" 
             Grid.Column="1" 
             DataContext="{Binding ElementName=PART_Browser}" 
             Style="{StaticResource FlatSlider}" 
             Margin="0,0,25,0" 
             Minimum="10" 
             Maximum="400" 
             Width="120" 
             VerticalAlignment="Center" 
             Value="{Binding Zoom}" 
             AutoToolTipPlacement="TopLeft" 
             IsSnapToTickEnabled="True" 
             IsMoveToPointEnabled="True" 
             SmallChange="1" 
             LargeChange="10" 
             TickFrequency="10" 
             Focusable="False"> 
             <Slider.ContextMenu> 
              <ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}"> 
               <MenuItem Command="{x:Static awe:WebControlCommands.ResetZoom}" CommandTarget="{Binding}" /> 
              </ContextMenu> 
             </Slider.ContextMenu> 
            </Slider> 
           </Grid> 
          </Grid> 
         </Grid> 

それから私は、第二のブラウザのURLを格納するTabView.csに新しいSourceプロパティを追加しました:

public Uri Source2 
    { 
     get { return this.GetValue(SourceProperty2) as Uri; } 
     set { SetValue(SourceProperty2, value); } 
    } 
public static readonly DependencyProperty SourceProperty2 = 
     DependencyProperty.Register("Source2", 
     typeof(Uri), typeof(TabView), 
     new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); 

そして最後に2組み込みを開始するために2つのURLをハードコーディングブラウザ

internal TabView(MainWindow parent, Uri url, bool isSourceView) 
    { 
     parentWindow = parent; 
     this.IsSourceView = isSourceView; 
     this.Source = new Uri("http://www.google.com"); 
     this.Source2 = new Uri("http://www.google.com"); 
    } 
関連する問題