Oft habe ich eine JavaScript-Datei, die ich verwenden möchte und für die bestimmte Variablen auf meiner Webseite definiert werden müssen.
Der Code sieht also ungefähr so aus:
<script type="text/javascript" src="file.js"></script>
<script type="text/javascript">
var obj1 = "somevalue";
</script>
Aber was ich tun möchte ist:
<script type="text/javascript"
src="file.js?obj1=somevalue&obj2=someothervalue"></script>
Ich habe verschiedene Methoden ausprobiert und die beste ist, die Abfragezeichenfolge wie folgt zu analysieren:
var scriptSrc = document.getElementById("myscript").src.toLowerCase();
Und dann nach meinen Werten suchen.
Ich frage mich, ob es einen anderen Weg gibt, dies zu tun, ohne eine Funktion zum Parsen meiner Zeichenfolge zu erstellen.
Kennen Sie alle andere Methoden?
Antworten:
Ich würde empfehlen, wenn möglich keine globalen Variablen zu verwenden. Verwenden Sie einen Namespace und OOP, um Ihre Argumente an ein Objekt weiterzuleiten.
Dieser Code gehört in file.js:
Und in Ihrer HTML-Datei:
quelle
var MYLIBRARY = MYLIBRARY || (function(){}());
? Warum sollteMYLIBRARY
ein boolescher Wert festgelegt werden?Sie können Parameter mit beliebigen Attributen übergeben. Dies funktioniert in allen aktuellen Browsern.
In somefile.js können Sie folgende Variablenwerte übergeben:
........
...etc...
quelle
document.currentScript
siehe caniuse.com/#feat=document-currentscript) (oder eine Polyfüllung verwenden können)$(..)
Syntax ist jquery, vergessen Sie nicht, sie einzuschließen.Eine andere Idee, auf die ich stieß, war,
id
dem<script>
Element ein zuzuweisen und die Argumente alsdata-*
Attribute zu übergeben. Das resultierende<script>
Tag würde ungefähr so aussehen:Das Skript könnte dann die ID verwenden, um sich programmgesteuert zu lokalisieren und die Argumente zu analysieren. Mit dem vorherigen
<script>
Tag könnte der Name folgendermaßen abgerufen werden:Wir bekommen
name
=helper
quelle
helper.js
Skript auch dazu bringen, allescript
Tags auf der Seite zu durchlaufen , nach dem mit zu suchenscr="helper.js"
und dann zu extrahierendata-name
.var this_js_script = $('script[src*=somefile]');
(von oben kopiert )Überprüfen Sie diese URL. Es funktioniert perfekt für die Anforderung.
http://feather.elektrum.org/book/src.html
Vielen Dank an den Autor. Zum schnellen Nachschlagen habe ich die folgende Hauptlogik eingefügt:
quelle
Sie verwenden globale Variablen :-D.
So was:
Der JavaScript-Code in 'file.js' kann problemlos auf
obj1
und zugreifenobj2
.EDIT Ich will nur hinzufügen , dass , wenn ‚file.js‘ will , wenn überprüfen
obj1
undobj2
haben sogar schon erklärt Ihnen die folgende Funktion verwenden können.Hoffe das hilft.
quelle
return typeof window[$Name] !== 'undefined';
. Bitte beachten Sie, dass Sie dieser Funktion eine Zeichenfolge übergeben würden, die den Namen der Variablen enthält. Es ist wahrscheinlich einfacher, einfach zu überprüfen, ob die Variable im aufrufenden Code vorhanden ist (dies kann nicht als Funktion implementiert werden) überif (typeof var !== 'undefined')
.var
.Hier ist ein sehr überstürzter Proof of Concept.
Ich bin mir sicher, dass es mindestens zwei Stellen gibt, an denen Verbesserungen möglich sind, und ich bin mir auch sicher, dass dies in freier Wildbahn nicht lange überleben würde. Jedes Feedback, um es präsentabler oder benutzerfreundlicher zu machen, ist willkommen.
Der Schlüssel ist das Festlegen einer ID für Ihr Skriptelement. Der einzige Haken ist, dass Sie das Skript nur einmal aufrufen können, da es nach dieser ID sucht, um die Abfragezeichenfolge abzurufen. Dies könnte behoben werden, wenn das Skript stattdessen alle Abfrageelemente durchläuft, um festzustellen, ob eines von ihnen darauf verweist, und wenn ja, die letzte Instanz eines solchen Skriptelements verwendet. Wie auch immer, weiter mit dem Code:
Skript wird aufgerufen:
Skript über folgende Seite aufgerufen:
quelle
könnte sehr einfach sein
beispielsweise
Sie können dann die Abfragezeichenfolge wie unten beschrieben in json konvertieren
und kann dann gerne verwenden
quelle
Dies ist einfach möglich, wenn Sie ein Javascript-Framework wie jQuery verwenden. Wie so,
Jetzt können Sie diese Parameter verwenden, indem Sie sie als variable Parameter aufteilen.
Der gleiche Vorgang kann ohne Framework ausgeführt werden, erfordert jedoch einige weitere Codezeilen.
quelle
Nun, Sie könnten die Javascript-Datei von einer der Skriptsprachen erstellen lassen und Ihre Variablen bei jeder Anforderung in die Datei einfügen. Sie müssten Ihrem Webserver mitteilen, dass er js-Dateien nicht statisch austeilen soll (die Verwendung von mod_rewrite würde ausreichen).
Beachten Sie jedoch, dass Sie das Caching dieser js-Dateien verlieren, da sie ständig geändert werden.
Tschüss.
quelle
<script>
Blocks können Sie etwas verwenden,MyModule.Initialize( '<%: Model.SomeProperty%>', '<%: Model.SomeOtherProperty%>', ...);
das auf dem Server gerendert wird. Achtung: Entkommt<%:
dem Wert, während<%=
der Wert nicht entkommen wird.MyModule
wäre ein Namespace (dh eine Variable in der .js-Datei, die selbst aufgerufen wird und die Funktion verfügbar machtInitialize
). Ich habe Ihre Antwort positiv bewertet, da dies ein hilfreicher Beitrag ist.Schöne Fragen und kreative Antworten, aber mein Vorschlag ist, Ihre Methoden zu parametrisieren, und das sollte alle Ihre Probleme ohne Tricks lösen.
wenn Sie Funktion haben:
Sie können dies ändern in:
Ich denke, dies ist der natürlichste Ansatz. Sie müssen keine zusätzliche Dokumentation über 'Dateiparameter' erstellen und erhalten dieselbe. Dies ist besonders nützlich, wenn Sie anderen Entwicklern erlauben, Ihre js-Datei zu verwenden.
quelle
Nein, Sie können dies nicht wirklich tun, indem Sie dem Querystring-Teil der JS-Datei-URL Variablen hinzufügen. Wenn es darum geht, den Teil des Codes zu schreiben, um die Zeichenfolge zu analysieren, die Sie stört, besteht eine andere Möglichkeit darin, Ihre Variablen durch json zu codieren und sie in etwas wie das rel-Attribut des Tags einzufügen? Ich weiß nicht, wie gültig dies in Bezug auf die HTML-Validierung ist, wenn Sie sich darüber große Sorgen machen. Dann müssen Sie nur noch das rel-Attribut des Skripts finden und dann json_decode.
z.B
quelle
Es ist kein gültiges HTML (glaube ich nicht), aber es scheint zu funktionieren, wenn Sie ein benutzerdefiniertes Attribut für das Skript-Tag auf Ihrer Webseite erstellen :
<script id="myScript" myCustomAttribute="some value" ....>
Greifen Sie dann auf das benutzerdefinierte Attribut im Javascript zu:
var myVar = document.getElementById( "myScript" ).getAttribute( "myCustomAttribute" );
Ich bin mir nicht sicher, ob dies besser oder schlechter ist als das Parsen der Skriptquellzeichenfolge.
quelle
Wenn Sie eine Methode benötigen, die die CSP-Prüfung besteht (die unsichere Inline-Prüfung verhindert), müssen Sie die nonce-Methode verwenden, um sowohl dem Skript als auch der CSP-Direktive einen eindeutigen Wert hinzuzufügen, oder Ihre Werte in den HTML-Code schreiben und erneut lesen.
Nonce-Methode für express.js:
oder schreiben Sie Werte in die HTML-Methode. in diesem Fall mit Jquery:
quelle