Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Internet Explorer meldet Fehler in Script (https://www.delphipraxis.net/192748-internet-explorer-meldet-fehler-script.html)

idefix2 16. Mai 2017 17:56

Internet Explorer meldet Fehler in Script
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich verwende den TWebbrowser, um automatisiert von einer Seite Daten abzurufen.
Im Prinzip funktioniert das, aber jedes mal, wenn die Seite geladen wird, kommt als erstes eine Fehlermeldung: Skriptfehler, die ich manuell mit dem Klick auf einen der Buttons (egal, ob ja oder nein) quittieren muss, bevor er weitermacht. Nachdem ich auf diese Art regelmäßig etliche Unterseiten abarbeiten möchte, ist das natürlich sehr lästig. Hat jemand eine Idee, wie ich das wegbringen könnte? Dir Tipps von der Microsoft Seite https://support.microsoft.com/de-at/help/285212 habe ich schon versucht, hat aber alles nichts geholfen (Wirken sich die IE-Einstellungen überhaupt auch auf den TWebbrowser aus?).

Wenn ich den IE vom Betriebssystem aus aufrufe, bringt die Seite ebenfalls (etwas andere) Fehlermeldungen, die ist offenbar schleißig programmiert (oder der IE, wie auch immer) - aber dagegen kann ich nichts machen. Im Firefox gibt es beim Seitenaufruf keine Probleme, bloß hilft mir das nichts.

nahpets 16. Mai 2017 18:02

AW: Internet Explorer meldet Fehler in Script
 
Im Objektinspektor beim TWebBrowser Silent auf True setzen.

Der schöne Günther 16. Mai 2017 18:43

AW: Internet Explorer meldet Fehler in Script
 
Tipp: Dir ist auch klar dass der TWebBrowser standardmäßig einen uralten Internet Explorer 7 emuliert, oder? Der hat natürlich dann auch mit Dingen wie Skripten und HTML5-Elementen Probleme die ein aktueller IE nicht mehr hat.

Das kann man nur über die Registry steuern, aber wenn man das direkt bei Anwendungsstart macht kann man es sich aussuchen in welchem IE-Modus der TWebBrowser läuft...


Delphi-Quellcode:
unit Common.Classes.Browser.EmulationAdjuster;

interface uses System.IoUtils, Winapi.Windows;

type
   /// <summary> <para>Setzt die Browser-Emulation für diese Anwendung (im HKCU-Hive)
   /// auf den angegebenen Wert. Standardmäßig, ohne Eingriff ist es in Windows immer
   /// <see cref="IE7_embedded" /></para>
   /// </summary>
   /// <remarks>
   /// Das Setzen des Emulations-Werts sollte so früh wie möglich
   /// passieren denn spätestens nach dem ersten Navigieren des WebBrowsers ist es zur
   /// ganzen Laufzeit der Anwendung fest und lässt sich nachträglich nicht mehr ändern
   /// </remarks>
   TBrowserEmulationAdjuster = class
      private
         class function GetExeName(): String; inline;
      public const
         // Quelle: https://msdn.microsoft.com/library/ee330730.aspx, Stand: 2017-04-26
         IE11_default   = 11000;
         IE11_Quirks      = 11001;
         IE10_force      = 10001;
         IE10_default   = 10000;
         IE9_Quirks      = 9999;
         IE9_default      = 9000;
         /// <summary>
         /// Webpages containing standards-based !DOCTYPE directives are displayed in IE7
         /// Standards mode. Default value for applications hosting the WebBrowser Control.
         /// </summary>
         IE7_embedded   = 7000;
      public
         class procedure SetBrowserEmulationDWORD(const value: DWORD);
   end platform;

implementation uses System.Win.Registry, System.SysUtils;

{ TBrowserEmulationAdjuster }

class function TBrowserEmulationAdjuster.GetExeName(): String;
begin
   Result := TPath.GetFileName( ParamStr(0) );
end;

class procedure TBrowserEmulationAdjuster.SetBrowserEmulationDWORD(const value: DWORD);
const
   registryPath = 'Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION';
var
   registry:   TRegistry;
   exeName:   String;
begin
   exeName := GetExeName();

   registry := TRegistry.Create(KEY_SET_VALUE);
   try
      registry.RootKey := HKEY_CURRENT_USER;
      Win32Check( registry.OpenKey(registryPath, True) );
      registry.WriteInteger(exeName, value)
   finally
      registry.Destroy();
   end;
end;

end.

jaenicke 16. Mai 2017 20:04

AW: Internet Explorer meldet Fehler in Script
 
Bist du sicher, dass du das nicht auch schlicht per Download der Seite mit TIdHttp oder ähnlichem machen kannst? Berechnen die Skripte auf der Seite etwas oder ähnliches, dass du die brauchst?
Denn nur dafür braucht man normalerweise TWebBrowser.

Und ansonsten würde ich das Chromium Control benutzen. Da werden die Skripte vermutlich ohne Fehler laufen.

idefix2 16. Mai 2017 20:45

AW: Internet Explorer meldet Fehler in Script
 
Zitat:

Zitat von nahpets (Beitrag 1371656)
Im Objektinspektor beim TWebBrowser Silent auf True setzen.

Danke, das funktioniert.

Zitat:

Zitat von jaenicke (Beitrag 1371672)
Bist du sicher, dass du das nicht auch schlicht per Download der Seite mit TIdHttp oder ähnlichem machen kannst? Berechnen die Skripte auf der Seite etwas oder ähnliches, dass du die brauchst?
Denn nur dafür braucht man normalerweise TWebBrowser.

Und ansonsten würde ich das Chromium Control benutzen. Da werden die Skripte vermutlich ohne Fehler laufen.

Sicher bin ich nicht. Aber das Program ist diesmal nicht für einen Kunden, sondern nur für mich selbst, und es wird sich das, was ich brauche, nicht leicht zu 100% automatisieren lassen, d.h. ich muss neben dem Download der Daten die Seite auch am Bildschirm anzeigen. Ich vermute, dass da ein Browser-Control sinnvoller als ein HTTP-Download ist.
Ich weiß nicht, was diese Skripte auf der Seite machen, ich brauche sie jedenfalls nicht. Was ich haben will, bekomme ich trotz der Skriptfehler richtig angezeigt.

Zitat:

Zitat von Der schöne Günther (Beitrag 1371666)
Tipp: Dir ist auch klar dass der TWebBrowser standardmäßig einen uralten Internet Explorer 7 emuliert, oder?

Nein, war mir nicht klar. Danke für den Hinweis für die Zukunft. Für diesen Job tuts allerdings der IE7 auch.
Und uralt? Ich bin sicher, Du bist älter :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf