簡體   English   中英

使用jQuery動態導入JavaScript?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM