2016-06-21 2 views
-1

In Greasemonkey, wenn ein Benutzer-Skript Dinge zum globalen Namespace hinzufügt, indem z. @require react-15.1.0.js, was passiert, wenn die ursprüngliche Seite auch React aber eine ältere Version (zB react-15.0.0.js) enthalten? Werden die globalen Namen irgendwie in separaten Umgebungen gespeichert, oder besteht die Möglichkeit, dass ein Benutzer-Skript eine Seite aufbrechen kann (und umgekehrt), indem globale Namen neu definiert werden?Können @required-Skripte mit anderen Skripten in Greasemonkey kollidieren?

Antwort

0

Nein, sie können nicht miteinander kollidieren. Ich bin nicht klar in den Details des Ausführungsmodells von Greasemonkey, aber ich habe einen Test durchgeführt. Ich habe diese HTML-Datei, die lodash verwendet wenn eine Schaltfläche geklickt wird:

<html> 
 
<head> 
 
<script src='https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js'></script> 
 
</head> 
 
<body> 
 
<input type='button' id="btn" value="Invoke lodash"> 
 
<script type="text/javascript"> 
 
\t el = document.getElementById("btn") 
 
\t el.addEventListener('click',function (argument) { 
 
\t \t console.log("3 =", _.add(1,2)); 
 
\t }) 
 
</script> 
 
</body> 
 
</html>

Ich habe auch ein userscript, die _ entfernt:

// ==UserScript== 
 
// @name  Test greasmonkey overriding 
 
// @namespace gm-overriding 
 
// @version  1 
 
// @grant  none 
 
// ==/UserScript== 
 

 
_ = null 
 
console.log("here is _:", _);

Das Benutzer-Script bewirkt, dass die nicht die lodash-Abhängigkeit beeinflusst, und der Button-Klick druckt immer noch die erwartete Ausgabe.

+0

Der Test ist fehlerhaft und Ihre Schlussfolgerung ist ungenau. Skripte stören sich gegenseitig und mit der Seite die ganze Zeit. [Hier ist eine Klasse von Beispielen] (http://stackoverflow.com/questions/12146445/jquery-in-greasemonkey-1-0-conflicts-with-websites-using-jquery). ... Verwenden Sie in Ihrem Testskript 'window._ = null;' und beobachten Sie, was passiert. –