CefSharp 不彈窗 這樣寫完之后 ,確實是不彈了,但是帶target="_blank" 的鏈接,直接打不開了、。。。。求解決之法。
public class LifeSpanHandler : ILifeSpanHandler
{
public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
{
newBrowser = null;
return true;
}
}
uj5u.com熱心網友回復:
呃 為啥 CEF 。 WPF資料這么少呢uj5u.com熱心網友回復:
就在昨天我已經放棄cef了,我覺得gecko 更好用一些,至少我在操作元素上我做到了。 但在CEF里我居然做不到~~~~
uj5u.com熱心網友回復:
public class LifeSpanHandler : ILifeSpanHandler
{
public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
{
if(!string.IsNullOrEmpty(targetUrl))
{
wb.Load(targetUrl);
}
newBrowser = null;
return true;
}
}

這樣能實作不彈框,就是不知道可有什么毛病
uj5u.com熱心網友回復:
參看http://blog.csdn.net/zhang116868/article/details/46945973uj5u.com熱心網友回復:
不彈窗,并且支持帶target="_blank" 的鏈接,代碼如下:1、實作ILifeSpanHandler介面
using CefSharp;
using CefSharp.WinForms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MyBrowser
{
public class CefLifeSpanHandler : CefSharp.ILifeSpanHandler
{
public CefLifeSpanHandler()
{
}
public bool DoClose(IWebBrowser browserControl, CefSharp.IBrowser browser)
{
if (browser.IsDisposed || browser.IsPopup)
{
return false;
}
return true;
}
public void OnAfterCreated(IWebBrowser browserControl, IBrowser browser)
{
}
public void OnBeforeClose(IWebBrowser browserControl, IBrowser browser)
{
}
public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IWindowInfo windowInfo, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
{
var chromiumWebBrowser = (ExtChromiumBrowser)browserControl;
ExtChromiumBrowser extBrowser = new ExtChromiumBrowser(targetUrl) { Dock = DockStyle.Fill };
var windowX = windowInfo.X;
var windowY = windowInfo.Y;
var windowWidth = (windowInfo.Width == int.MinValue) ? 600 : windowInfo.Width;
var windowHeight = (windowInfo.Height == int.MinValue) ? 800 : windowInfo.Height;
chromiumWebBrowser.Invoke(new Action(() =>
{
var popup = new Form
{
Left = windowX,
Top = windowY,
Width = windowWidth,
Height = windowHeight,
Text = targetFrameName
};
popup.CreateControl();
var control = new Control();
control.Dock = DockStyle.Fill;
control.CreateControl();
popup.Controls.Add(control);
popup.Show();
var rect = control.ClientRectangle;
windowInfo.SetAsChild(control.Handle, rect.Left, rect.Top, rect.Right, rect.Bottom);
NewWindowEventArgs e = new NewWindowEventArgs(extBrowser, targetUrl, popup);
chromiumWebBrowser.OnNewWindow(e);
}));
newBrowser = null;
return false;
}
}
}
2、使用ILifeSpanHandler介面
using CefSharp.WinForms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms.Integration;
namespace MyBrowser
{
public class ExtChromiumBrowser : ChromiumWebBrowser
{
public ExtChromiumBrowser()
: base("about:_blank")
{
this.LifeSpanHandler = new CefLifeSpanHandler();
this.DownloadHandler = new DownloadHandler(this);
}
public ExtChromiumBrowser(string adress)
: base(adress)
{
this.LifeSpanHandler = new CefLifeSpanHandler();
this.DownloadHandler = new DownloadHandler(this);
}
public event EventHandler<NewWindowEventArgs> StartNewWindow;
public void OnNewWindow(NewWindowEventArgs e)
{
if (StartNewWindow != null)
{
StartNewWindow(this, e);
}
}
}
}
3、實作StartNewWindow
private void BindBrowser(ExtChromiumBrowser browser)
{
browser.StartNewWindow += (s, e) =>
{
this.Dispatcher.BeginInvoke(new Action(() =>
{
_browser = e.Browser;
BindBrowser(e.Browser);
host.Child = e.Browser;
e.Browser.FrameLoadStart += (ss, ee) =>
{
this.Dispatcher.BeginInvoke(new Action(() =>
{
(ss as ExtChromiumBrowser).Focus();
}));
};
e.Form.Visible = false;
Task.Factory.StartNew(() =>
{
Thread.Sleep(1000);
this.Dispatcher.BeginInvoke(new Action(() =>
{
e.Form.Dispose();
browser.Dispose();
}));
});
}));
};
}
uj5u.com熱心網友回復:
不彈窗,并且支持帶target="_blank" 的鏈接,代碼如下:1、實作ILifeSpanHandler介面
using CefSharp;
using CefSharp.WinForms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MyBrowser
{
public class CefLifeSpanHandler : CefSharp.ILifeSpanHandler
{
public CefLifeSpanHandler()
{
}
public bool DoClose(IWebBrowser browserControl, CefSharp.IBrowser browser)
{
if (browser.IsDisposed || browser.IsPopup)
{
return false;
}
return true;
}
public void OnAfterCreated(IWebBrowser browserControl, IBrowser browser)
{
}
public void OnBeforeClose(IWebBrowser browserControl, IBrowser browser)
{
}
public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IWindowInfo windowInfo, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
{
var chromiumWebBrowser = (ExtChromiumBrowser)browserControl;
chromiumWebBrowser.Invoke(new Action(() =>
{
NewWindowEventArgs e = new NewWindowEventArgs(windowInfo);
chromiumWebBrowser.OnNewWindow(e);
}));
newBrowser = null;
return false;
}
}
}
2、使用ILifeSpanHandler介面
using CefSharp.WinForms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms.Integration;
namespace MyBrowser
{
public class ExtChromiumBrowser : ChromiumWebBrowser
{
public ExtChromiumBrowser()
: base(null)
{
this.LifeSpanHandler = new CefLifeSpanHandler();
this.DownloadHandler = new DownloadHandler(this);
this.MenuHandler = new MenuHandler();
}
public event EventHandler<NewWindowEventArgs> StartNewWindow;
public void OnNewWindow(NewWindowEventArgs e)
{
if (StartNewWindow != null)
{
StartNewWindow(this, e);
}
}
}
}
3、實作StartNewWindow
private void Window_Loaded(object sender, RoutedEventArgs e)
{
_browser = new ExtChromiumBrowser() { Dock = DockStyle.Fill };
BindBrowser(_browser);
_browser.FrameLoadEnd += FrameLoadEnd;
_browser.Load(_tokenUrl);
host.Child = _browser;
}
private void BindBrowser(ExtChromiumBrowser browser)
{
browser.StartNewWindow += (s, e) =>
{
var control = new System.Windows.Forms.Control();
control.Dock = DockStyle.Fill;
control.CreateControl();
host.Child = control;
control.Focus();
e.WindowInfo.SetAsChild(control.Handle, 0, 0, (int)host.ActualWidth, (int)host.ActualHeight);
};
browser.FrameLoadStart += (ss, ee) =>
{
this.Dispatcher.BeginInvoke(new Action(() =>
{
(ss as ExtChromiumBrowser).Focus();
}));
};
}
uj5u.com熱心網友回復:
遇到了支付功能,跳轉支付寶,跳轉就沒了,請教uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
解決了嗎?轉載請註明出處,本文鏈接:https://www.uj5u.com/net/102061.html
標籤:C#
上一篇:WCF中的幾個問題
下一篇:C#表單應用出現的問題
