Ändern Sie den window.location-Prototyp, um bestimmte Weiterleitungen zu deaktivieren?

8

Ich versuche, window.location mit Greasemonkey am Anfang des Dokuments selektiv zu deaktivieren.

Ich möchte JavaScript nicht vollständig deaktivieren, sondern nur einige Weiterleitungen deaktivieren, die mit Javascript durchgeführt wurden. Sie sehen so aus:

%Vor%     
affiszervmention 16.08.2013, 23:20
quelle

3 Antworten

4

Sie können den window.location -Prototyp nicht ändern, da dies eine "native Eigenschaft" von window ist und es nicht konfigurierbar .

Bei Firefox (Greasemonkey), wenn Sie versuchen, dies zu überschreiben, erhalten Sie Fehler wie:

  

TypeError: kann die nicht konfigurierbare Eigenschaft 'location' nicht neu definieren

und

  

Fehler: Berechtigung zum Schützen der nativen Eigenschaftseigenschaft

... je nachdem, wie Sie es versuchen. Andere Browser geben ähnliche Fehler.

Um diese Art der Verlagerung zu blockieren, müssen Sie das Javascript der Seite von Fall zu Fall beeinflussen.

Siehe "Ausführung der JavaScript-Funktion stoppen (Client-Seite) oder optimieren" für eine allgemeine Vorgehensweise, die in Firefox funktioniert . Dies kann je nach dem genauen Code Ihrer Zielseite viel einfacher sein.

    
Brock Adams 17.08.2013, 06:25
quelle
4

Ich glaube nicht, dass es möglich ist.

  • Sie können Eigenschaften oder Methoden in window.location nicht überschreiben (schlägt im Hintergrund fehl)
  • Sie können seinen Prototyp nicht mit location.__proto__ = Something.prototype neu definieren
  • location.constructor.prototype ist im Grunde Object.prototype
  • Der Konstruktor tut nichts (wie zum Beispiel die Attribute oder Methoden)
  • __definesetter__ schlägt automatisch fehl
  • Object.defineProperty gibt einen Fehler wie, TypeError: Cannot redefine property: href
  • delete window.location und delete window.location.href tun nichts

Ich habe keine Ideen mehr ...

    
FakeRainBrigand 17.08.2013 04:38
quelle
-1

ziemlich spät, aber Sie können es einfach tun, ohne das ganze Skript mit Object.prototype.watch :

zu entfernen %Vor%     
Omar Elawady 11.05.2015 18:58
quelle