none
InternetExplorer - Navigate y Navigate2 en Windows 7 no funciona RRS feed

  • Pregunta

  • Hola,

    Con la nueva versión de Windows (tanto Windows 7 Professional como Windows 7 Enterprise), la llamada a Navigate2 del objeto InternetExplorer a dejado de funcionar.

    El programa se encargaba de abrir un nuevo IE pasandoloe como parametros unas variables en POST. Con el nuevo sistema operativo, sucede que, tras realizar la llamada a Navigate2 o Navigate, tal y como se carga la página, el IE se cierra al momento, sin cargar ninguna pagina. Queda comprobado que el IE se cierra JUSTO CUANDO SE LLAMA A NAVIGATE o NAVIGATE2 mandandole datos por POST.

    Si que funcionaba para versiones anteriores (Windows Vista e Windows XP).

    ¿Alguien sabe porque?

    EL código de la aplicación es algo parecido a esto:

    Public Function AbrirPaginaPortal(URLPortal As String, Page As String, CodClient As String, UserId As String, Password As String, EsperarCierre As String, IEVisible As String, SaveXmlAs As String, Optional ShowWindowConect As String = "", Optional ShowErrors As String = "", Optional Error As String = "") As Boolean
    
        On Error GoTo ErrorAbrirPaginaPortal
        
        Dim strPostData As String
        Dim strHeader As String  
                           
        'Make the Post Data String
        strPostData = "UserID=" + Trim(UserId) + "&UserPass=" + Trim(Password) + "&ToPageTask=" + Replace(Trim(Page), "&", "#@#")
        Dim absPostData() As Byte
        
        absPostData() = StrConv(strPostData, vbFromUnicode)       
          
        'Post the data
        If AbrirIE = True Then
            If IEEsVisible = "1" Then
                oIE.Visible = True
            End If       
                  
            oIE.Navigate2 Trim(URLPortal) + "A3FisLoginEx.aspx?CL=" + CStr(CLng(CodClient)), 0, "", absPostData(), strHeader        
                   
                                         
        End If    
           
        Set oIE = Nothing
               
        On Error GoTo 0
        Exit Function
    ErrorAbrirPaginaPortal:
        Set oIE = Nothing
        On Error GoTo 0
        Exit Function
    End Function
    
    miércoles, 3 de marzo de 2010 10:20

Todas las respuestas

  • Hola Joan: pudiste colocar el objeto en el formulario? por qué no pruebas creando una instancia sin utilizar el control?
    Yo lo probé en Microsoft Access con Windows 7 y funcionó bién.
    viernes, 12 de marzo de 2010 21:11
  • Aunque no salga ,estoy creando una nueva instancia de este (no está envedido en el formulario) por código, y aún y así no funciona.
    lunes, 29 de marzo de 2010 10:05
  • Joan, yo hice una prueba en Windows 7 de un amigo y no hubo problema. Por qué no haces primero navegar una página (html, php, asp, aspx,etc) sin envío de data? y de esa manera vas descartando. Yo utilizé navigate.

    Por otro lado, aqui envías por GET, no por POST; recuerda capturar las variables con querystring.

    CJ

    martes, 30 de marzo de 2010 1:24
  • Este es el código que utilizo en unas pruebas que hice en Microsoft Access. El procedimiento de nombre sql es público, de manera que al actualizar datos en un form o procedimiento, actualizo la base de datos remota. Estoy apenas comenzando este proyecto (personal), por lo que no verás tratamiento de errores.  ;)

    En la página web (act.php), hay un formulario de nombre mifrm y un campo de nombre cadena. También hay un campo(cuantos) donde escribo la cantidad de registros afectados.

    1. En este form, coloqué un objeto Microsoft Web Browser de nombre ww. El formulario no es visible, por lo que se podría instanciar el control, pero para los efectos de prueba lo tengo de esta manera.
    Desde cualquier procedimiento donde actualizo data local llamo:
    Private Sub Form_AfterUpdate()
    If CurrentProject.AllForms("frmww").IsLoaded = True Then
        cadena = "UPDATE contacto SET razonsocial='" & Me.razonsocial & "',rif='" & Me.rif _
            & "',direccion='" & Me.direccion & "',email='" & Me.email & "',tlfs='" & Me.tlfs & "'"
       
        Form_frmww.sql cadena
    Else
        MsgBox "El formulario de paso, está cerrado."
    End If
    End Sub

     

    Este es el código del form (frmww) que contiene al componente:

    Private Sub Form_Open(Cancel As Integer)
    DoCmd.Maximize
    ww.Navigate "http://localhost/condominios/act.php"
    affecTed = 0
    End Sub

    Private Sub ww_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    On Error GoTo lbl_err
    Do
    DoEvents
        If ww.Busy = False Then
            DoCmd.Hourglass False
            affecTed = ww.Document.getElementById("cuantos").Value
            If affecTed = 0 Then
                MsgBox "No se actualizó la base de datos remota."
            Else
                MsgBox "Proceso realizado"
            End If
            Exit Do
        End If
    Loop
    lbl_exit:
        Exit Sub
    lbl_err:
        Debug.Print Err.Description
    End Sub

    Public Sub sql(SQLstr)
    On Error GoTo lbl_err
    DoCmd.Hourglass True
        With ww.Document.Forms("mifrm")
        .Item("cadena").Value = SQLstr
        .submit
        End With
    lbl_exit:
        Exit Sub
    lbl_err:
        Debug.Print Err.Number & vbTab & Err.Description
        Resume lbl_exit
    End Sub

    Si deseas, coloco aqui el codigo de act.php (solo 27 lineas y actualiza la base de datos remota)

    martes, 30 de marzo de 2010 1:40