[英]Import javascript dynamically with jQuery?
我正在尝试使用jQuery设置小部件框架,因此我需要通过解析小部件的xhtml并将其包含在框架页面中来导入Java脚本。 问题在于,这可能导致名称空间受到污染。 是否可以在运行时将Java脚本加载到名称空间中?
也许有一些更好的方法被我忽略了?
谢谢,皮特
你可以做这样的事情...
var myOtherFramework = null;
$.get("myScript.js", function(data) {
myOtherFramework = eval("(" + data + ")");
});
然后像引用...
myOtherFramework.funcName();
正如Josh Stodola提到的,在运行时创建变量不是问题
var holdsWidgetUUID = "widgetUUIDValue";
eval(holdsWidgetUUID + "= (" + data + ")");
alert(eval(holdsWidgetUUID));
或者,如果您愿意
var UUID = "widgetUUID";
var holdsWidgetUUID = "widgetUUIDValue";
window["widgets"] = new Array();
window["widgets"][holdsWidgetUUID] = data;
alert(window["widgets"][holdsWidgetUUID]);
问题是让加载的javascript可以像dynamicvariablename.methodname()一样被调用
如果您对随附的javascript进行某种编码实践,则我有一个可行的解决方案。 也许这会使您朝着正确的方向前进。
这是一个小部件javascript(works.js)。 请注意,这是具有内部定义的字段和方法的javascript“类”。 它本身使名称空间污染保持较低,并允许我们实现所需的调用形式x.getInfo()
function () {
this.type = 1;
this.color = "red";
this.getInfo = function() {
return this.color + ' ' + this.type + ' widget';
};
}
这是在运行时将其包含在名称空间中的文件
<html>
<head>
<title>Widget Magic?</title>
<script type='text/javascript' src='jquery.js'></script>
<script type='text/javascript'>
var UUID = "widgetUUID";
var holdsWidgetUUID = "widgetUUIDValue";
window["widgets"] = new Array();
$.get("works.js", function(data) {
window["widgets"][holdsWidgetUUID] = eval("(" + data + ")");
$(document).ready(function() {
window["widgets"][holdsWidgetUUID] = new (window["widgets"][holdsWidgetUUID])();
alert(window["widgets"][holdsWidgetUUID].color);
alert(window["widgets"][holdsWidgetUUID].getInfo());
});
});
</script>
</head>
<body>
<p>Just some stuff</p>
</body>
</html>
您加载的javascript本身应该已经在使用唯一的名称空间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.