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.
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.
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.
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.
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.
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.
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.
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.
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.
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ückProst, Entschuldigung, wenn das ein bisschen seltsam ist
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?
Es gibt einen Wikipedia-Artikel über Code-Verschleierung . Vielleicht können dir die Tricks dort helfen =)
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.
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.
Der normale Weg wäre ein Hash zu verwenden.
Per Definition ist es fast unmöglich, aus dem Hash den ursprünglichen Code abzuleiten.
Es ist nie hilfreich, den Code komplex aussehen zu lassen, damit er nicht gehackt wird!