栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

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

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

系列文章目录

上一节:01制作cefsharp浏览器准备——制作第一个cefsharp浏览器打开百度


cefsharp专题目录页链接

文章目录
  • 系列文章目录
  • 一、编程环境
  • 二、新建class1,添加类
  • 三、添加窗体与控件
  • 三、F5调试(第一次加载会较慢,后面就会比较快)
  • 四、本小节资源文件
  • 下节预告


一、编程环境

系统: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 控件类

        '’
        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浏览器的操作按钮、页面放缩、浏览历史

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983700.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号