Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Error con el TWebBrowser (https://www.clubdelphi.com/foros/showthread.php?t=92486)

pockelsm3 12-11-2017 05:38:03

Error con el TWebBrowser
 
1 Archivos Adjunto(s)
saludos amigos delphianos

soy novato con delphi y necesito un poco de ayuda

tengo app donde el uso el componente del twebbrowser desde hace unos meses me esta presentando un problema en youtube, la pagina la carga a la perfeccion, pero cuando realizo una busqueda cualquiera me presenta un error, we're sorry but your computer or network may be sending automated download queries, el cual anexo una imagen.

lo cual esto solamente sucede en youtube, en cualquier otra pagina no presenta nada, ni siquiera en google que son de ellos mismos

tambien he estado tratando de cambiar a firefox, pero este me este me da un error de memoria cuando va a presentar la pagina.

El_Raso 10-01-2019 05:34:13

Saludos... tengo ese mismo error pero solo me pasa en los windows de 32bit aun teniendo la ultima version de IE actualizada a la fecha. A alguien de ustedes le a pasado lo mismo? Como lo han resuelto? Alguna idea?

dec 10-01-2019 10:01:56

Hola a todos,

Yo diría que el sitio web en cuestión está usando el "User agent" de nuestro navegador, y, seguramente, este no es "común", por decirlo así, de modo que, el sitio web evita servir el contenido. La solución, si fuera este el caso, pasaría por cambiar el "User agent" del navegador, a otro más o menos común, como pudiera ser el "User agent" de Mozilla Firefox, por ejemplo.

Ñuño Martínez 10-01-2019 19:02:03

Precisamente me acaba de pasar lo mismo con el programa que usamos en el trabajo, aunque no sé si está hecho con Delphi. Curiosamente sólo pasa con las búsquedas, pero reproduce el vídeo perfectamente, así que seguramente sea lo que dice dec, que el user agent le haga saltar la alarma o que haga algo "que no deba". También me pregunto si podría ser que no use JavaScript.

dec 11-01-2019 09:20:54

Hola a todos,

El compañero Ñuño me ha recordado otra posible causa del problema. Se trata de la versión de Internet Explorer que puede emular el componente "TWebBrowser". En efecto, si no hacemos nada más que poner un componente "TWebBrowser" en un formulario, dicho componente emulará una versión "antigua" de Internet Explorer, que, puede no ser compatible con los sitios web "modernos".

La siguiente unidad permite establecer la emulación de Internet Explorer 11, que, es suficiente (a día de hoy) para dar soporte a los sitios web "modernos" de que hablamos:

Código Delphi [-]
unit AppBuilder.Shared.BrowserFixes;

interface

type
  TBrowserFixes = class(TObject)
  public
    class procedure Initialize();
    class procedure Uninitialize();
  end;

implementation

uses
  // Delphi
  Winapi.Windows,
  System.SysUtils,
  System.Win.Registry;

const
  FEATURE_GPU_RENDERING_KEY = 'Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_GPU_RENDERING';
  FEATURE_BROWSER_EMULATION_KEY = 'Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION';

{ TBrowserFixes }

class procedure TBrowserFixes.Initialize();
var
  ExeName: string;
begin
  ExeName := ExtractFileName(ParamStr(0));
  with TRegistry.Create() do
  try
    RootKey := HKEY_CURRENT_USER;

    if OpenKey(FEATURE_BROWSER_EMULATION_KEY, True) then
    begin
      if not ValueExists(ExeName) then
      begin
        // http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
        WriteInteger(ExeName, 11001);
      end;
      CloseKey();
    end;

    if OpenKey(FEATURE_GPU_RENDERING_KEY, True) then
    begin
      if not ValueExists(ExeName) then
      begin
        // https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx
        WriteInteger(ExeName, DWORD(1));
      end;
      CloseKey();
    end;

  finally
    Free();
  end;
end;

class procedure TBrowserFixes.Uninitialize();
var
  ExeName: string;
begin
  ExeName := ExtractFileName(ParamStr(0));

  with TRegistry.Create() do
  try
    RootKey := HKEY_CURRENT_USER;

    if OpenKey(FEATURE_BROWSER_EMULATION_KEY, False) then
    begin
      if ValueExists(ExeName) then
        DeleteValue(ExeName);
      CloseKey();
    end;

    if OpenKey(FEATURE_GPU_RENDERING_KEY, False) then
    begin
      if ValueExists(ExeName) then
        DeleteValue(ExeName);
      CloseKey();
    end;

  finally
    Free();
  end;
end;

initialization

finalization
  TBrowserFixes.Uninitialize();

end.

Para utilizar dicha unidad hay que incluirla en nuestro proyecto, y, a continuación usar el método "TBrowserFixes.Initialize()". Como puede verse, la propia unidad realiza el "Uninitialize" por sí sola. Adicionalmente (esto puede quitarse, si no se precisa, porque, no tiene que ver con la emulación de Internet Explorer) esta unidad también establece que el componente "TWebBrowser" "renderize" su contenido usando la GPU, si fuese posible.

He mencionado lo del "User agent", pero, lo cierto es que yo probaría primero con la "emulación" de Internet Explorer: es posible que esto solucione el problema y por tanto ya no sea necesario cambiar el "User agent".


La franja horaria es GMT +2. Ahora son las 02:17:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi