Javascript 清除全局命名空间以启用惰性脚本加载

Javascript 清除全局命名空间以启用惰性脚本加载,javascript,jquery,Javascript,Jquery,我正在使用jQueryUI和其他一些JS库,它们总共构成了相当大的一部分JS(甚至是缩小和组合)。我的想法是不在页面中包含脚本标记,而是删除我定义的所有函数以及jQuery的$sign,这样页面上的内联JS仍然可以调用它们,但会命中存根。然后存根将加载.js文件并实际调用该函数。现在的问题是: 如何将窗口对象/全局对象上的所有函数调用重定向到我的自定义函数 我不习惯使用动态语言,因此请您就如何在JS中使用动态语言提供一些建议。如前所述。。。这很可能是徒劳的。除非你是一名研究人员,并为此获得报酬(

我正在使用jQueryUI和其他一些JS库,它们总共构成了相当大的一部分JS(甚至是缩小和组合)。我的想法是不在页面中包含脚本标记,而是删除我定义的所有函数以及jQuery的$sign,这样页面上的内联JS仍然可以调用它们,但会命中存根。然后存根将加载.js文件并实际调用该函数。现在的问题是:

如何将窗口对象/全局对象上的所有函数调用重定向到我的自定义函数


我不习惯使用动态语言,因此请您就如何在JS中使用动态语言提供一些建议。

如前所述。。。这很可能是徒劳的。除非你是一名研究人员,并为此获得报酬(且仅此),否则我会将时间花在我的实际产品和/或重构上,以减少页面所需的不同JS库(例如,仅使用jquery,而不是jquery+yui)

不过,我想编辑是为了真正回答这个问题。只需在javascript中进行设置,就可以轻松替换任何函数。例如

$ = function(searchString) {
    // if this method is called
    // and jquery hasn't been loaded yet
    // load jquery (which will overwrite all of your local jquery functions with its own
};
延迟加载.js文件的方法在整个web上都有很好的文档记录,例如:

问题的根源在于使用依赖于库的内嵌JS。我们有一个旧的遗留站点,在Smarty模板中有一堆内嵌的JS。我最终修改了Smarty,以便捕获JS调用,然后将它们全部输出到页脚中。看起来像这样

<!-- mySubContent.inc.html -->
<div id="theTabs">
  <ul><li><!--
    ...
  --></li></ul>
  <div id="tab1"><!--
    ...
  --></div>
</div>
{capture_js}
  $("#theTabs").tabs();
{/capture_js}

<!-- footer.inc.html -->
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  <script type="text/javascript">
    {render_captured_js}
  </script>
</body>
</html>

    • {capture_js} $(“#theTabs”).tabs(); {/capture_js} {render_captured_js}

无论如何,如果您现在不能重构代码库,那么这可能会给您一些关于如何解决在线JS问题的想法。哦,读一下这个-。

懒惰加载js的提示,也欢迎任何其他方式!这就是我想要的,但对于所有函数都是如此我不想全部声明,太多了。您必须构建一个特定于库的解析器,该解析器遍历每个库的.js文件,找出有哪些全局函数,然后从中构造存根。否则,没有自动/动态方式。这可以追溯到这样一种观点,即这可能比你可能得到的好处更多。真的要考虑一下这项努力是否值得。祝你好运