The following sample demonstrates how to handle popup windows opened via window.open() JavaScript function. You can catch the moment when Chromium engine needs to display the popup window and decide yourself how this popup window must be displayed (in a separate window, in tab pane, it must be suppressed, etc.).


MainWindow.xaml


<Window x:Class="WPFPopups.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wpf="clr-namespace:DotNetBrowser.WPF;assembly=DotNetBrowser"
        Title="MainWindow" Height="350" Width="525" Closing="Window_Closing">
    <Grid Name="mainLayout">
        <wpf:WPFBrowserView Name="browserView"/>
    </Grid>
</Window>


MainWindow.xaml.cs


using System;
using System.Threading;
using System.Windows;
using System.Windows.Threading;
using DotNetBrowser;
using DotNetBrowser.WPF;
using DotNetBrowser.Events;

namespace WPFPopups
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            browserView.Browser.PopupHandler = new CustomPopupHandler(browserView);
            browserView.Browser.LoadURL("http://www.popuptest.com/popuptest1.html");
        }

        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            browserView.Dispose();
            browserView.Browser.Dispose();
        }
    }
}


CustomPopupHandler.cs


using DotNetBrowser;
using System;
using System.Windows;

namespace WPFPopups
{
    public class CustomPopupHandler : PopupHandler
    {
        private FrameworkElement control;

        public CustomPopupHandler(FrameworkElement control)
        {
            this.control = control;
        }

        public PopupContainer HandlePopup(PopupParams popupParams)
        {
            return new CustomPopupContainer(control);
        }
    }
}


CustomPopupContainer.cs


using System;
using System.Drawing;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Threading;
using DotNetBrowser;
using DotNetBrowser.Events;
using DotNetBrowser.WPF;


namespace WPFPopups
{
    public class CustomPopupContainer : PopupContainer
    {
        private Window window;
        private WPFBrowserView browserView;
        private FrameworkElement parentControl;


        public CustomPopupContainer(FrameworkElement parentControl)
        {
            this.parentControl = parentControl;
        }

        public void InsertBrowser(Browser browser, Rectangle initialBounds)
        {
            Application.Current.Dispatcher.BeginInvoke((Action)(() =>
            {
                Window parentWindow = Window.GetWindow(parentControl);
                if (parentWindow != null)
                {
                    browserView = new WPFBrowserView(browser);

                    window = new Window();

                    if (!initialBounds.IsEmpty)
                    {
                        window.SizeToContent = SizeToContent.WidthAndHeight;
                        window.Top = initialBounds.X;
                        window.Left = initialBounds.Y;
                        window.Width = initialBounds.Width;
                        window.Height = initialBounds.Height;
                        browserView.UpdateSize(initialBounds.Width, initialBounds.Height);
                    }
                    else
                    {
                        window.Width = 800;
                        window.Height = 600;
                    }

                    window.Closed += delegate
                    {
                        window.Content = null;
                        browserView.Dispose();
                        browser.Dispose();
                    };

                    browser.TitleChangedEvent += delegate(object sender, TitleEventArgs e)
                    {
                        Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Input, (ThreadStart)delegate
                        {
                            window.Title = e.Title;
                        });
                    };

                    browser.DisposeEvent += delegate(object sender, DisposeEventArgs e)
                    {
                        Application.Current.Dispatcher.Invoke((Action)(() =>
                        {
                            window.Content = null;
                            window.Hide();
                            window.Close();
                        }));
                    };

                    window.Content = browserView;
                    window.Show();
                }
                else
                {
                    throw new InvalidOperationException("Can't get parent Window control");
                }
            }));
        }
    }
}