Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 15 su 15
  1. #11
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da djciko
    non so aiutarti, ti seguo a fatica su quest'argomento...
    mi segui a fatica forse... perchè ho un poco sbagliato il codice

    comunque, se ti interessa ho una cosa un poco più interessante: se ti interessa mando il codice:

    In una libreria ho una classe che ha il compito di intercettare l'html della pagina, permettere di cambiarlo, e rimandarlo al browser.
    Una versione è realizzata con gli eventi, un'altra con i delegati.
    Pietro

  2. #12

  3. #13
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    1° esempio con i delegati (è più semplice che con gli eventi)

    file ResponseFilter.vb
    codice:
    Public Delegate Function DelegateSetHtml(ByVal html As String) As String
    Public Class ResponseFilter
        Inherits Stream
    
        Private m_sink As Stream
        Private m_position As Long
        Private m_function As DelegateSetHtml
    
    
        Public Sub New(ByVal sink As Stream, ByVal functionHtml As DelegateSetHtml)
            Me.m_sink = sink
            Me.m_function = functionHtml
        End Sub
    
        Public Overrides ReadOnly Property CanRead() As Boolean
            Get
                Return True
            End Get
        End Property
    
        Public Overrides ReadOnly Property CanSeek() As Boolean
            Get
                Return False
            End Get
        End Property
    
        Public Overrides ReadOnly Property CanWrite() As Boolean
            Get
                Return False
            End Get
        End Property
    
        Public Overrides Sub Flush()
            Me.m_sink.Flush()
        End Sub
    
        Public Overrides ReadOnly Property Length() As Long
            Get
                Return 0
            End Get
        End Property
    
        Public Overrides Property Position() As Long
            Get
                Return Me.m_position
            End Get
            Set(ByVal Value As Long)
                Me.m_position = Value
            End Set
        End Property
    
        Public Overrides Function Read(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer) As Integer
            Return Me.m_sink.Read(buffer, offset, count)
        End Function
    
        Public Overrides Function Seek(ByVal offset As Long, ByVal origin As System.IO.SeekOrigin) As Long
            Return 0
        End Function
    
        Public Overrides Sub SetLength(ByVal value As Long)
            Me.m_sink.SetLength(value)
        End Sub
    
        Public Overrides Sub Close()
            Me.m_sink.Close()
    
        End Sub
    
        Public Overrides Sub Write(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer)
            Dim Html As String = System.Text.UTF8Encoding.UTF8.GetString(buffer, offset, count)
            Html = Me.m_function(Html)
            buffer = System.Text.UTF8Encoding.UTF8.GetBytes(Html)
    
            Me.m_sink.Write(buffer, 0, buffer.Length)
    
    
        End Sub
    
    End Class

    pagina di esempio intercettare html.aspx
    codice:
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="intercettare html.aspx.vb" Inherits="CorsoApogeo_leggere_il_contenuto_html_della_pagina_intercettare_html" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Pagina senza titolo</title>
        <link href="../../stili/Styles.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <h1>Intercettare html con delegati</h1>
        <h3>PIETRO</h3>
    
        <form id="form1" runat="server">
            
    
    
                <asp:TextBox ID="TextBox1" runat="server">Nicola</asp:TextBox></p>
            
    
    
                <asp:TextBox ID="TextBox2" runat="server" Visible="false"></asp:TextBox></p>
            
    
    
                <asp:Button ID="Button1" runat="server" Text="Intercetta html"></asp:Button></p>
        </form>
    </body>
    </html>
    codice sottostante
    codice:
    Option Strict On
    Partial Class CorsoApogeo_leggere_il_contenuto_html_della_pagina_intercettare_html
        Inherits System.Web.UI.Page
    
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Inserire qui il codice utente necessario per inizializzare la pagina
    
        End Sub
    
        Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.Response.Filter = New ResponseFilter(Response.Filter, AddressOf modificaHtml)
        End Sub
    
        Public Function modificaHtml(ByVal html As String) As String
            Dim FileName As String = "c:\tmp\response.htm"
    
            Try
                html = html.Replace("PIETRO", "--- " & Me.TextBox1.Text & " ---")
                File.WriteAllText(FileName, html, Encoding.UTF8)
    
            Catch ex As Exception
                html &= "<script>alert('Errore nella scrittura del file');</script>"
    
            End Try
    
            Return html
    
        End Function
    
        Public Function modificaHtml_old(ByVal html As String) As String
            Dim fs As FileStream = Nothing
            Dim buffer As Byte()
    
            Try
                fs = New FileStream("c:\tmp\response.htm", FileMode.OpenOrCreate, FileAccess.Write)
                html = html.Replace("PIETRO", "----NICOLA---")
                buffer = System.Text.UTF8Encoding.UTF8.GetBytes(html)
                fs.Write(buffer, 0, buffer.Length)
    
            Catch ex As Exception
                html &= "<script>alert('Errore nella scrittura del file');</script>"
    
            Finally
                If Not (fs Is Nothing) Then fs.Close()
            End Try
    
            Return html
    
        End Function
    
    End Class
    2° esempio che fa uso degli eventi
    file ResponseFilterWithEvent.vb
    codice:
    Public Class ResponseFilterWithEvent : Inherits Stream
        Public Event onHTML As onHTML
    
        Private m_sink As Stream
        Private m_position As Long
    
    
        Public Sub New(ByVal sink As Stream)
            Me.m_sink = sink
        End Sub
    
        Public Overrides ReadOnly Property CanRead() As Boolean
            Get
                Return True
            End Get
        End Property
    
        Public Overrides ReadOnly Property CanSeek() As Boolean
            Get
                Return False
            End Get
        End Property
    
        Public Overrides ReadOnly Property CanWrite() As Boolean
            Get
                Return False
            End Get
        End Property
    
        Public Overrides Sub Flush()
            Me.m_sink.Flush()
        End Sub
    
        Public Overrides ReadOnly Property Length() As Long
            Get
                Return 0
            End Get
        End Property
    
        Public Overrides Property Position() As Long
            Get
                Return Me.m_position
            End Get
            Set(ByVal Value As Long)
                Me.m_position = Value
            End Set
        End Property
    
        Public Overrides Function Read(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer) As Integer
            Return Me.m_sink.Read(buffer, offset, count)
        End Function
    
        Public Overrides Function Seek(ByVal offset As Long, ByVal origin As System.IO.SeekOrigin) As Long
            Return 0
        End Function
    
        Public Overrides Sub SetLength(ByVal value As Long)
            Me.m_sink.SetLength(value)
        End Sub
    
        Public Overrides Sub Close()
            Me.m_sink.Close()
    
        End Sub
    
        Public Overrides Sub Write(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer)
            Dim Html As String = System.Text.UTF8Encoding.UTF8.GetString(buffer, offset, count)
            Dim e As New ResponseFilterEventArgs()
            e.HTML = Html
            RaiseEvent onHTML(Me, e)
            Html = e.HTML
            buffer = System.Text.UTF8Encoding.UTF8.GetBytes(Html)
    
            Me.m_sink.Write(buffer, 0, buffer.Length)
    
    
        End Sub
    
    End Class
    
    
    'classe personale di evento
    Public Class ResponseFilterEventArgs
        Private _HTML As String = ""
        Public Property HTML() As String
            Get
                Return Me._HTML
            End Get
            Set(ByVal value As String)
                Me._HTML = value
            End Set
        End Property
    End Class
    
    'delegate che definisce l'evento
    Public Delegate Sub onHTML(ByVal sender As Object, ByVal e As ResponseFilterEventArgs)
    la pagina di esempio è uguale alla prima, mentre il codice sottostante è:
    codice:
    Option Strict On
    
    Partial Class CorsoApogeo_leggere_il_contenuto_html_della_pagina_intercettare_html_con_eventi
        Inherits System.Web.UI.Page
    
        Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            'creo una istanza della classe ResponseFilterWithEvent
            Dim j As New ResponseFilterWithEvent(Me.Response.Filter)
    
            'aggancio l'evento onHTML
            AddHandler j.onHTML, AddressOf Me.modificaHtml
    
            'filtro l'html
            Me.Response.Filter = j
    
        End Sub
    
    
        'evento lanciato da ResponseFilterWithEvent
        Private Sub modificaHtml(ByVal Sender As Object, ByVal e As ResponseFilterEventArgs)
            'file su cui voglio salvare l'html
            Dim FileName As String = "c:\tmp\response.htm"
    
            'recupero l'html
            Dim html As String = e.HTML
            Try
                'modifico l'html
                html = html.Replace("PIETRO", "--- " & Me.TextBox1.Text & " ---")
    
                'scrivo la pagina html modificata
                File.WriteAllText(FileName, html, Encoding.UTF8)
    
            Catch ex As Exception
                'altrimenti messaggio di errore
                html &= "<script>alert('Errore nella scrittura del file');</script>"
    
            End Try
            'restituisco l'html modificato per essere mandato al browser
            e.HTML = html
    
        End Sub
    
    End Class



    ps. se trovi errori, io sono qui
    Pietro

  4. #14
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    ok ma dopo mi ci vorra' un'altra settimana di ferie

    perche' hai eliminato l'uso del buffer nel 1° esempio ? ricordo che anche in java con gli stream di bytes dava problemi, non puoi immaginare le nottate per mettere su un sistema di messaggistica

  5. #15
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da djciko
    ok ma dopo mi ci vorra' un'altra settimana di ferie

    perche' hai eliminato l'uso del buffer nel 1° esempio ? ricordo che anche in java con gli stream di bytes dava problemi, non puoi immaginare le nottate per mettere su un sistema di messaggistica
    è il primo esempio del tipo che faccio. Se lo migliori, ti sarei grato se lo comunicassi. ciao
    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.