系列文章目录
上一节:01制作cefsharp浏览器准备——制作第一个cefsharp浏览器打开百度
一、编程环境
系统:win10
vs:2019 社区版免费下载
vs安装位置:默认安装位置
语言:vbnet
cefsharp版本:88.2.90务必对应版本蓝奏云下载
二、新建class1,添加类
1、引入
Imports CefSharp
Imports CefSharp.Handler
Imports CefSharp.WinForms
2、继承ChromiumWebBrowser 控件,重写新页面、下载、右键等类
Public Class ExtChromiumBrowser
Inherits ChromiumWebBrowser ''继承ChromiumWebBrowser 控件类
'’<Obsolete>
Public Sub New(e As NewWindowEventArgs)
MyBase.New(e.url)
Me.DownloadHandler = New DownloadHandler()
Me.LifeSpanHandler = New CefLifeSpanHandler()
End Sub
Public Sub New(url As String)
MyBase.New(url)
Me.LifeSpanHandler = New CefLifeSpanHandler()
End Sub
Public Event StartNewWindow As EventHandler(Of NewWindowEventArgs)
Public Sub OnNewWindow(e As NewWindowEventArgs)
RaiseEvent StartNewWindow(Me, e)
End Sub
End Class
Public Class NewWindowEventArgs ''新页面类
Inherits EventArgs
Private _windowInfo As IWindowInfo
Public Property WindowInfo() As IWindowInfo
Get
Return _windowInfo
End Get
Set
Value = _windowInfo
End Set
End Property
Public Property url() As String
Get
Return m_url
End Get
Set
m_url = Value
End Set
End Property
Private m_url As String
Public Sub New(windowInfo As IWindowInfo, url As String)
_windowInfo = windowInfo
Me.url = url
End Sub
End Class
Public Class DownloadHandler ''下载功能类
Implements IDownloadHandler
Public Sub IDownloadHandler_OnBeforeDownload(chromiumWebBrowser As IWebBrowser, browser As IBrowser, downloadItem As DownloadItem, callback As IBeforeDownloadCallback)
Dim ie As New WebBrowser()
ie.Navigate(downloadItem.Url)
browser.CloseBrowser(False)
End Sub
Public Sub IDownloadHandler_OnDownloadUpdated(browser As IBrowser, downloadItem As DownloadItem, callback As IDownloadItemCallback)
downloadItem.IsCancelled = True
End Sub
Public Function IDownloadHandler_OnDownloadUpdated(downloadItem As CefSharp.DownloadItem) As Boolean
Return False
End Function
Public Sub IDownloadHandler_OnDownloadUpdated(chromiumWebBrowser As IWebBrowser, browser As IBrowser, downloadItem As DownloadItem, callback As IDownloadItemCallback)
Throw New NotImplementedException()
End Sub
Public Sub OnBeforeDownload(chromiumWebBrowser As IWebBrowser, browser As IBrowser, downloadItem As DownloadItem, callback As IBeforeDownloadCallback) Implements IDownloadHandler.OnBeforeDownload
Throw New NotImplementedException()
End Sub
Public Sub OnDownloadUpdated(chromiumWebBrowser As IWebBrowser, browser As IBrowser, downloadItem As DownloadItem, callback As IDownloadItemCallback) Implements IDownloadHandler.OnDownloadUpdated
Throw New NotImplementedException()
End Sub
End Class
Public Class CefLifeSpanHandler
Implements CefSharp.ILifeSpanHandler
Private Sub CefLifeSpanHandler()
End Sub
Private Function ILifeSpanHandler_OnBeforePopup(browserControl As IWebBrowser, browser As IBrowser, frame As CefSharp.IFrame, targetUrl As String, targetFrameName As String, targetDisposition As WindowOpenDisposition,
userGesture As Boolean, popupFeatures As IPopupFeatures, windowInfo As IWindowInfo, browserSettings As IBrowserSettings, ByRef noJavascriptAccess As Boolean, ByRef newBrowser As IWebBrowser) As Boolean Implements ILifeSpanHandler.OnBeforePopup
Dim chromiumWebBrowser = DirectCast(browserControl, ExtChromiumBrowser)
chromiumWebBrowser.Invoke(New Action(Function()
Dim e As New NewWindowEventArgs(windowInfo, targetUrl)
chromiumWebBrowser.OnNewWindow(e)
End Function))
newBrowser = Nothing
Return True
End Function
Private Sub ILifeSpanHandler_OnAfterCreated(chromiumWebBrowser As IWebBrowser, browser As IBrowser) Implements ILifeSpanHandler.OnAfterCreated
End Sub
Private Function ILifeSpanHandler_DoClose(chromiumWebBrowser As IWebBrowser, browser As IBrowser) As Boolean Implements ILifeSpanHandler.DoClose
If browser.IsDisposed OrElse browser.IsPopup Then
Return False
End If
Return True
End Function
Private Sub ILifeSpanHandler_OnBeforeClose(chromiumWebBrowser As IWebBrowser, browser As IBrowser) Implements ILifeSpanHandler.OnBeforeClose
End Sub
End Class
三、添加窗体与控件
准备控件:
1、textbox1,【anchor】属性为:left,top,right
2、panel1,【anchor】属性为:left,top,right,bottom
主窗体代码:
Imports CefSharp
Imports CefSharp.WinForms
Imports text.Class1
Imports System.String
'Imports
Public Class Form1
Public browser As ExtChromiumBrowser
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim sett As New CefSettings '' 初始化浏览器
Cef.Initialize(sett)
browser = New ExtChromiumBrowser("https://limestart.cn/")
Panel1.Controls.Add(browser)
browser.Dock = DockStyle.Fill
'''''''绑定新添事件'''''''''''
AddHandler browser.StartNewWindow, AddressOf browser_StartNewWindow
AddHandler browser.AddressChanged, AddressOf browser_AddressChanged
AddHandler browser.FrameLoadEnd, AddressOf browser_FrameLoadEnd
AddHandler browser.LoadingStateChanged, AddressOf browser_LoadingStateChanged
End Sub
Public url2 As String
Private Delegate Sub str_Delegate(str As String) ''跨线程设置地址栏地址
Private Sub SetTxt_Url(str As String)
'外线程调用
If InvokeRequired Then
Invoke(New str_Delegate(AddressOf SetTxt_Url), str)
Return
End If
TextBox1.Text = str ''设置地址栏地址
With ListBox1 ''历史listbox增加历史
.Items.Add(ListBox1.Items.Count + 1)
.Items.Item(.Items.Count - 1) = str
End With
End Sub
Private Sub browser_AddressChanged(sender As Object, e As AddressChangedEventArgs) ''浏览器地址变化事件
SetTxt_Url(e.Address.ToString) ''委托主线程更改地址栏、listbox增加历史
End Sub
Public urlChange As Boolean '全局变量,检测网址变换
Private Sub browser_FrameLoadEnd(sender As Object, e As CefSharp.FrameLoadEndEventArgs) ''浏览器加载结束事件
End Sub
Private Sub browser_LoadingStateChanged(sender As Object, e As LoadingStateChangedEventArgs) ''浏览器加载状态变换事件
End Sub
Private Sub browser_StartNewWindow(sender As Object, e As NewWindowEventArgs) ''新开页面事件
browser.Load(e.ToString.ToString) ''Brower浏览器新页面导航到地址,关键处
End Sub
End Class
三、F5调试(第一次加载会较慢,后面就会比较快)
四、本小节资源文件
1、cefsharp-单页面打开网页,下载,地址栏【源码】.
2、下载资源加载,项目引用出现感叹号解决方法