Ich versuche, einige externe JS-Dateien zu laden, und einige unlösbare Namespace-Konflikte haben.kann ich eine Javascript-Datei in einem anderen Kontext als 'Fenster' laden?
Ich hatte die Idee, einige der Dateien in ihrem eigenen Kontext irgendwie zu laden, das "this
" vom Zeigen auf das Fensterobjekt zu irgendeinem kundenspezifischen Namensraum zu ersetzen.
Beispiel:
first.js:
name = "first";
second.js:
name = "second";
Es scheint mir, dass diese Art von Trick sehr nützlich sein kann. Ist es überhaupt möglich?
EDIT
scheint, dass „this
“ nicht beginnen, das Problem zu lösen ersetzen, da es nicht die Standardkontext-Kennung für die Auflösung in Javascript ist. das ist mein Testcode:
var first = {};
var second = {};
(function(){name = "first";}).call(first);
(function(){name = "second";}).call(second);
document.write('name= '+name+' <br/>\n'); //prints "second"
document.write('first.name= '+first.name+' <br/>\n'); //prints "undefined"
document.write('second.name= '+second.name+' <br/>\n'); //prints "undefined
irgendwelche ideen?
Lösung
Es ist nicht möglich. Ich bin heute klüger geworden als heute Morgen, und ich gab es auf. Ich empfehle diese erhellende Lektüre für jedermann mit einem ähnlichen Problem, das einen Riss an, es nehmen möchten: http://jibbering.com/faq/notes/closures/
http://softwareas.com/cross-domain-communication-with-iframes
Ironischerweise wurde das ursprüngliche Problem ausgelöst, wenn ich mehrere JQuery-Versionen verwalten wollte :). Ich habe am Ende etwas IFrame-Sache gemacht, wenn ich mich genau erinnere. –