Newsgroup: it.comp.lang.visual-basic
Titolo: webbrowser - limitare la navigazione

devo mettere delle macchine con vincoli alla navigazione.
in sostanza, 10-15 domini.
i domini sono caricati in una matrice aurl(j,2), in terza colonna
nel before navigate 2 sto provando
(bnewurl e' pubblico, serve anche sotto):
Private Sub WB1_BeforeNavigate2(ByVal pDisp As Object, _
    URL As Variant, Flags As Variant, TargetFrameName As Variant, _
    PostData As Variant, Headers As Variant, Cancel As Boolean)
    Dim j As Long, lChek As Long
    bNewUrl = False
'    For j = 0 To UBound(aUrl)
'        If Len(URL) >= Len(aUrl(j, 2)) Then
'            lChek = Len(aUrl(j, 2))
'        Else
'            lChek = Len(URL)
'        End If
'Debug.Print
'Debug.Print j
'Debug.Print Left(URL, lChek)
'Debug.Print Left(aUrl(j, 2), lChek)
'        If Left(URL, lChek) = Left(aUrl(j, 2), lChek) Then
'            SB.Panels(2) = URL
'            bNewUrl = True
'            Exit For
'        End If
'    Next
    Cancel = Not bNewUrl
End Sub
Private Sub WB1_NewWindow2(ppDisp As Object, Cancel As Boolean)
    Cancel = Not bNewUrl
End Sub
se lascio beforenavigate commentato cosi', cancel diventa vero e
effettivamente non si naviga proprio.
se solo cerco il confronto (ho provato in vari modi per gestire la
differente lunghezza delle stringhe in confronto, compreso
    if url like aurl(j,2) & "*"
), bnewurl diventa sempre vero, e si va dappertutto, nella stessa finestra o
in target=_blank.
cosa sto sbagliando ?
grazie, j.

perchè non selezioni gli url in base al dominio?
Mi spiego:
se ho 
www.nicolaottomano.it/percorso/pagina.htm
posso vedere se il dominio nella matrice è 
www.nicolaottomano.it
quindi consento la navigazione. Se invece il dominio è 
www.altrodominio.it
allora non consento.
bye
-- 
Esistono 10 tipi di persone: chi conosce il binario e chi no.
www.nicolaottomano.it

     PostData As Variant, Headers As Variant, Cancel As Boolean)
ideina del caz che non ho provato...leggo nella dichiarazione
URL As Variant
prova a fare:
dim dummy as string
dummy=cstr(URL)
e poi confronta con i tuoi nomi
.....
è un idea eh...provare non costa nulla!
-- 
Il Wodkino Nazionale è a : 
www.martek.it
Pagina Vb/Bestiario/Lamer Experience :
http://www.martek.it/go.asp?portamia=2
 Quotefix e altro:
http://www.martek.it/go.asp?portamia=4
Usr: ICLVB Pw: amici

 '            bNewUrl = True
dovrebbe essere False, perché poi viene invertito.
Spero di non aver capito male.
Bye, G.

 č un idea eh...provare non costa nulla!
infatti ho provato all'istante, sto pure sotto pressione.
nisba, apre le sue belle finestre di ie.
grazie cmq, a.

 allora non consento.
e' appunto quello che non funzia...
al momento, o tutto o niente.

 Spero di non aver capito male.
se new/allowed va a false, cancel va a true e la navigazione e' bloccata.
di default new sta a false. passa a true (e quindi niente cancel) solo se
almeno un confronto e' ok.
almeno, l'idea era quella...

 almeno un confronto e' ok.
Occhèi, restringiamo il campo.
*****
If InStr(URL, "spippolatori") Then
MsgBox "sito no buono"
Cancel = True
End If
*****
Questo infilato nella BeforeNavigate2 permette la navigazione
su qualunque sito tranne che su 
www.spippolatori.com
 o qualunque
altra cosa che contenga quella stringa, e funziona. Quindi il problema
è nel confronto.
Per mantenere il codice pulito e soprattutto suddividerlo, io farei
una function del tipo
' ******************
Function UrlPermesso(UrlDaVerificare) As Boolean
'qui per semplificare sto prevedendo tutto l'URL, in realtà
' a te interessa solo il dominio, quindi devi isolarlo
' facendo una split sui punti o simili, a meno che non sia
' quello che già fai nel resto della roba che non ho visto :-)
    Dim j As Long
    For j = 0 To UBound(aUrl)
        If InStr(aUrl(j, 2), UrlDaVerificare) Then
            UrlPermesso = True
            Exit Function
        End If
    Next
UrlPermesso = False
End Function
' ******************
Così con una riga nella Beforeblabla te la cavi:
If UrlPermesso(URL) = False Then Cancel = True
Bye, G.

 allora non consento.
E se è del tipo
http://communicator.virgilio.it/home
 ?
La radice è 
virgilio.it
, o forse addirittura 
www.virgilio.it
Ma non conviene controllare per ognuna delle voci valide se è contenuta
nell'indirizzo digitato?
E il controllo farlo *prima* del .Navigate(), anzichè da dentro il WB?
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 La radice è 
virgilio.it
, o forse addirittura 
www.virgilio.it
beh lui dovrebbe controllare la stringa compresa tra http:// e il primo /
poi la lista dei siti consentiti se la decide lui


 poi la lista dei siti consentiti se la decide lui
e' difficile definire parametri fissi. es:
www.foo.org:8080
e ovviamente fra quelli leciti ce n'e' di simili...

 *****
una cosa piu' banale:
Private Sub WB1_BeforeNavigate2(ByVal pDisp As Object, _
    URL As Variant, Flags As Variant, TargetFrameName As Variant, _
    PostData As Variant, Headers As Variant, Cancel As Boolean)
    Dim j As Long, lChek As Long, sUrl As String
    sUrl = CStr(URL)
    bNewUrl = False
    SB.Panels(2) = ""
    For j = 0 To UBound(aUrl)
If Trim(aUrl(j, 2)) <> "" Then
        If Len(sUrl) >= Len(aUrl(j, 2)) Then
            lChek = Len(aUrl(j, 2))
        Else
            lChek = Len(sUrl)
        End If
Debug.Print
Debug.Print j
Debug.Print Left(sUrl, lChek)
Debug.Print Left(aUrl(j, 2), lChek)
Debug.Print bNewUrl
        'If Left(sUrl, lChek) = Left(aUrl(j, 2), lChek) Then
        If InStr(sUrl, aUrl(j, 2)) Then
            SB.Panels(2) = URL
            bNewUrl = True
Debug.Print bNewUrl
            Exit For
        End If
End If
    Next
    Cancel = Not bNewUrl
    If Cancel Then MsgBox _
        UCase(sUrl) & vbNewLine & "Indirizzo non consentito"
End Sub
guarda bene l'if non rientrato...
la matrice (il txt) ha 11 righe: 0-10
piu' un invio...
al debug j (non javina :) non si fermava a 10, ma andava a 11, e nell'ultimo
confronto, fra due stringhe vuote (stando al debug), newurl passava a
true...
cosi' almeno nella stessa finestra viene stoppato. rimane il _blank, mo'
vediamo.
pero' la gestione degli array mi lascia perplesso. oggi con questo aurl(j,3)
chiedevo la colonna 4, e quello mica dava errore. semplicemente, non dava
niente. un 'out of bound' o simili me lo sarei aspettato...
adesso stoppa anche "about:blank". perfino eccessivo :)
ciao, a.

 quelli mi arrivano solo come nuovo url del wb, nel beforenavigate.
vero, vero, non avevo considerato i link.
Comunque penso resti valido il sistema del controllo inverso: per ogni voce
valida va controllato se questa è contenuta nel link di destinazione e non
se il link è contenuto tra le voci valide, perchè queste sono costrette ad
essere sottostringhe del link, come abbiamo visto.


> vero, vero, non avevo considerato i link.
a proposito come si intercetta l'url del link cliccato su un controllo
webbrowser?


 webbrowser?
a nico', scusa, ma li hai letti i miei post ?
c'e' pure il codice...

 c'e' pure il codice...
si scusa. mi stavo confondendo. Purtroppo oggi ho dato un esame e ho
studiato per l'esame di dopodomani... sto proprio fuso..
Io intendevo se un utente clicca sulla voce "Apri in una nuova finestra" del
menu.
Vorrei farlo aprire in una nuova istanza del mio browser (e non di
explorer), ma l'evento NewWindow non prende l'url in ingresso.
nye


 explorer), ma l'evento NewWindow non prende l'url in ingresso.
potrebbe forse prenderlo se lo implementi a classi, tipo
    dim f as new frmWb
puoi passargli l'url che ti ha dato il beforenavigate
    f.wb.navigate iltuourl
ma devo provarci a modo. al momento il 'nuova finestra' sembra un po' un
mondo a se', almeno se nel link c'e' un _blank.
ciao, a.

 un mondo a se', almeno se nel link c'e' un _blank.
purtroppo non riesco a far funzionare il "beforenavigate" se uso l'opzione
"apri in un'altra finestra"...
bye
