02cefsharp实现单页面打开新网页,地址栏,下载等基本功能

系列文章目录

上一节:01制作cefsharp浏览器准备——制作第一个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、下载资源加载,项目引用出现感叹号解决方法

下节预告

03浏览器的操作按钮、页面放缩、浏览历史

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一路向前的小Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值