___ answer3239253 ___

Dies würde wahrscheinlich passieren, wenn die Seite Javascript oder %code% verwendet, um auf eine andere Seite umzuleiten.

Wenn ja, gibt es keine gute Problemumgehung.

    
___ qstntxt ___

Ich habe dieses Thema recherchiert und alle scheinen zuzustimmen, dass die Lösung darin besteht, das %code% des Webbrowsers zu überprüfen, bis die Einstellung abgeschlossen ist.

Aber tatsächlich wird das Ereignis manchmal mit dem %code% ausgelöst, das mehrmals auf Complete gesetzt wurde.

Ich glaube nicht, dass es eine Lösung mit diesem fehlerhaften .NET Webbrowser gibt, aber es könnte einen geben, wenn ich die zugrunde liegende DOM-Komponente verwende.

Das einzige Problem ist, ich habe keine Ahnung, wie ich auf die DOM-Komponente hinter dem WebBrowser zugreifen kann, die das DocumentCompleted-Ereignis auslöst.

    
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ tag123net ___ Das .NET-Framework ist ein Software-Framework, das hauptsächlich für das Microsoft Windows-Betriebssystem entwickelt wurde. Es enthält eine Implementierung der Basisklassenbibliothek, Common Language Runtime (allgemein als CLR bezeichnet), Common Type System (allgemein als CTS bezeichnet) und Dynamic Language Runtime. Es unterstützt viele Programmiersprachen, einschließlich C #, VB.NET, F # und C ++ / CLI. NICHT für Fragen zu .NET Core verwenden. ___ answer38057856 ___

Ich kann nichts finden, was 100% Sicherheit gibt. Das erwähnte Beispiel (e.Url.Equals (webBrowser1.Url)) funktioniert möglicherweise für einen einfachen WebBrowser.Navigate (url), aber in meinem Fall klicke ich auf Knoten im Code, um neue Rahmen in bestehenden Rahmen zu öffnen. Meistens ist die Anzahl der Male "Navigating" und "DocumentCompleted" gleich, aber auch nicht immer. "isBusy = false" und "ReadyState = Complete" wird immer der Fall sein, wenn es fertig ist (zumindest bis jetzt), aber es wird auch einige Male diesen Zustand haben, wenn es noch lädt. Das Zählen von Frames erscheint mir auch nutzlos, in einem Fall wird DocumentCompleted 23-mal ausgelöst, jedoch sind alle Frames und Sub-Sub-Sub-Frames 14 insgesamt.

Das Einzige, was zu funktionieren scheint, ist eine kurze Zeit (1 oder 2 Sekunden?) abzuwarten, um zu sehen, ob etwas passiert (irgendwelche Ereignisse ausgelöst, irgendwelche Statusänderungen).

Hmm, ich habe eine andere Lösung für mich gefunden. Oft sind wir nicht daran interessiert, die ganze Seite zu laden, oft wollen wir, dass bestimmte Elemente existieren. Also nach jedem DocumentCompleted und wenn "isBusy = false" und "ReadyState = Complete" können wir das DOM durchsuchen, wenn dieses Element existiert.

    
___

8

Ich habe dieses Thema recherchiert und alle scheinen zuzustimmen, dass die Lösung darin besteht, das ReadyState des Webbrowsers zu überprüfen, bis die Einstellung abgeschlossen ist.

Aber tatsächlich wird das Ereignis manchmal mit dem ReadyState ausgelöst, das mehrmals auf Complete gesetzt wurde.

Ich glaube nicht, dass es eine Lösung mit diesem fehlerhaften .NET Webbrowser gibt, aber es könnte einen geben, wenn ich die zugrunde liegende DOM-Komponente verwende.

Das einzige Problem ist, ich habe keine Ahnung, wie ich auf die DOM-Komponente hinter dem WebBrowser zugreifen kann, die das DocumentCompleted-Ereignis auslöst.

    
Juan 13.07.2010, 16:25
quelle

3 Antworten

33
___ answer3239253 ___

Dies würde wahrscheinlich passieren, wenn die Seite Javascript oder %code% verwendet, um auf eine andere Seite umzuleiten.

Wenn ja, gibt es keine gute Problemumgehung.

    
___ qstntxt ___

Ich habe dieses Thema recherchiert und alle scheinen zuzustimmen, dass die Lösung darin besteht, das %code% des Webbrowsers zu überprüfen, bis die Einstellung abgeschlossen ist.

Aber tatsächlich wird das Ereignis manchmal mit dem %code% ausgelöst, das mehrmals auf Complete gesetzt wurde.

Ich glaube nicht, dass es eine Lösung mit diesem fehlerhaften .NET Webbrowser gibt, aber es könnte einen geben, wenn ich die zugrunde liegende DOM-Komponente verwende.

Das einzige Problem ist, ich habe keine Ahnung, wie ich auf die DOM-Komponente hinter dem WebBrowser zugreifen kann, die das DocumentCompleted-Ereignis auslöst.

    
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ tag123net ___ Das .NET-Framework ist ein Software-Framework, das hauptsächlich für das Microsoft Windows-Betriebssystem entwickelt wurde. Es enthält eine Implementierung der Basisklassenbibliothek, Common Language Runtime (allgemein als CLR bezeichnet), Common Type System (allgemein als CTS bezeichnet) und Dynamic Language Runtime. Es unterstützt viele Programmiersprachen, einschließlich C #, VB.NET, F # und C ++ / CLI. NICHT für Fragen zu .NET Core verwenden. ___ answer38057856 ___

Ich kann nichts finden, was 100% Sicherheit gibt. Das erwähnte Beispiel (e.Url.Equals (webBrowser1.Url)) funktioniert möglicherweise für einen einfachen WebBrowser.Navigate (url), aber in meinem Fall klicke ich auf Knoten im Code, um neue Rahmen in bestehenden Rahmen zu öffnen. Meistens ist die Anzahl der Male "Navigating" und "DocumentCompleted" gleich, aber auch nicht immer. "isBusy = false" und "ReadyState = Complete" wird immer der Fall sein, wenn es fertig ist (zumindest bis jetzt), aber es wird auch einige Male diesen Zustand haben, wenn es noch lädt. Das Zählen von Frames erscheint mir auch nutzlos, in einem Fall wird DocumentCompleted 23-mal ausgelöst, jedoch sind alle Frames und Sub-Sub-Sub-Frames 14 insgesamt.

Das Einzige, was zu funktionieren scheint, ist eine kurze Zeit (1 oder 2 Sekunden?) abzuwarten, um zu sehen, ob etwas passiert (irgendwelche Ereignisse ausgelöst, irgendwelche Statusänderungen).

Hmm, ich habe eine andere Lösung für mich gefunden. Oft sind wir nicht daran interessiert, die ganze Seite zu laden, oft wollen wir, dass bestimmte Elemente existieren. Also nach jedem DocumentCompleted und wenn "isBusy = false" und "ReadyState = Complete" können wir das DOM durchsuchen, wenn dieses Element existiert.

    
___
Hans Passant 13.07.2010, 16:36
quelle
0

Dies würde wahrscheinlich passieren, wenn die Seite Javascript oder <meta refresh> verwendet, um auf eine andere Seite umzuleiten.

Wenn ja, gibt es keine gute Problemumgehung.

    
SLaks 13.07.2010 16:29
quelle
0

Ich kann nichts finden, was 100% Sicherheit gibt. Das erwähnte Beispiel (e.Url.Equals (webBrowser1.Url)) funktioniert möglicherweise für einen einfachen WebBrowser.Navigate (url), aber in meinem Fall klicke ich auf Knoten im Code, um neue Rahmen in bestehenden Rahmen zu öffnen. Meistens ist die Anzahl der Male "Navigating" und "DocumentCompleted" gleich, aber auch nicht immer. "isBusy = false" und "ReadyState = Complete" wird immer der Fall sein, wenn es fertig ist (zumindest bis jetzt), aber es wird auch einige Male diesen Zustand haben, wenn es noch lädt. Das Zählen von Frames erscheint mir auch nutzlos, in einem Fall wird DocumentCompleted 23-mal ausgelöst, jedoch sind alle Frames und Sub-Sub-Sub-Frames 14 insgesamt.

Das Einzige, was zu funktionieren scheint, ist eine kurze Zeit (1 oder 2 Sekunden?) abzuwarten, um zu sehen, ob etwas passiert (irgendwelche Ereignisse ausgelöst, irgendwelche Statusänderungen).

Hmm, ich habe eine andere Lösung für mich gefunden. Oft sind wir nicht daran interessiert, die ganze Seite zu laden, oft wollen wir, dass bestimmte Elemente existieren. Also nach jedem DocumentCompleted und wenn "isBusy = false" und "ReadyState = Complete" können wir das DOM durchsuchen, wenn dieses Element existiert.

    
user2843099 27.06.2016 15:28
quelle

Tags und Links

Django: Verwenden von Annotate, Count und Distinct in einem Queryset ___ answer3413905 ___

Sicherheit durch Dunkelheit ist immer eine schlechte Idee. Sie müssen es nicht vermeiden, aber Sie sollten nicht nur darauf vertrauen.

Entweder verschlüsseln Sie Ihre Serien mit einem Schlüssel, den Sie beim Start des Dienstes eingeben, oder geben Sie die Serien nur als hex oder base64 an, nicht als ASCII.

    
___ qstntxt ___

Ich schreibe eine Möglichkeit zu überprüfen, ob eine Kunden-Seriennummer mit meiner fest codierten Nummer übereinstimmt. Gibt es eine Möglichkeit, dies so schwer lesbar wie möglich zu machen, falls ein unerwünschter Code in die Hände des Benutzers gelangt?

Ich arbeite in Java.

Zum Beispiel (Pseudocode)

if (x! = y) springt aus dem Code und gibt den Fehler

zurück

Prost, Entschuldigung, wenn das ein bisschen seltsam ist

    
___ answer3413895 ___

Verändern Sie die Kontrollstruktur des freigegebenen Codes?

Geben Sie beispielsweise die Zahlen an einem zufälligen Punkt im Code unter einer anderen Variablen ein, und stellen Sie sie an einem beliebigen Punkt gleich x und y ein?

Ссылка

    
___ answer3413903 ___

Es gibt einen Wikipedia-Artikel über Code-Verschleierung . Vielleicht können dir die Tricks dort helfen =)

    
___ answer3414250 ___

Sie können SHA1 oder eine andere Einwegverschlüsselung versuchen (MD5 ist nicht so sicher, aber es ist ziemlich gut). Tu das nicht:

%Vor%

Mach das:

%Vor%

So kann der Code-Leser nur einen verschlüsselten (und sehr, sehr schwer zu entschlüsseln) Wert sehen.

    
___ answer3414158 ___

Anstatt zu versuchen, den Code komplex zu gestalten, können Sie andere Methoden implementieren, die Ihre fest codierte Seriennummer nicht offen legen.

Versuchen Sie, die fest codierte Nummer an einem festen Ort als verschlüsseltes Byte-Array zu speichern. So ist es nicht lesbar. Vergleichen Sie zum Vergleich den Client-Seriencode mit demselben Algorithmus und vergleichen Sie ihn.

    
___ tag123obfuscation ___ Obfuscation ist der Prozess, bei dem der Code geändert wird, sodass es für einen Entwickler schwieriger ist, klar zu verstehen, was das beabsichtigte Programm tut oder wie es funktioniert. Je größer das Programm ist, desto größer ist die Verschleierung, da der Code ineinander übergeht und verschiedene Segmente durch das Programm verbindet. ___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ answer3414235 ___

Der normale Weg wäre ein Hash zu verwenden.

  1. Erstellen Sie einen Hash Ihres Seriencodes.
  2. Um die Client-Seriennummer zu validieren, verwenden Sie die gleiche Funktion.
  3. Wenn die Hashes übereinstimmen, war die Seriennummer korrekt, obwohl die Seriennummer selbst nicht im Code enthalten war.

Per Definition ist es fast unmöglich, aus dem Hash den ursprünglichen Code abzuleiten.

    
___ answer3413873 ___

Es ist nie hilfreich, den Code komplex aussehen zu lassen, damit er nicht gehackt wird!

    
___