就在前面:这个项目不使用 JQuery。
我们有一些第三方 JavaScript;它又大又多毛,不需要经常使用,所以我们只在需要时动态加载它:
function loadBigHairyCode()
{
var file = document.createElement('script')
file.setAttribute("type","text/javascript")
file.setAttribute("src","path/to/big/ugly/script/file.js")
document.getElementsByTagName("head")[0].appendChild(file)
magic_needs_to_happen_here
}
脚本加载工作正常,包括一些未在此处显示的相应 CSS。
加载的文件定义了一个构造函数(调用它UglyGlobalFunc
),我们以通常的方式(var foo = new UglyGlobalFunc(....)
)在其他地方使用它。问题是,因为该文件的其余部分有点难看,我们需要对其进行一些修复,以使其不那么糟糕。具体来说,在我上面展示的“魔术需要在这里发生”的地方,我想写相当于
UglyGlobalFunc.prototype.BodgeBodgeBodge = function() {....}
就像我在编辑底层文件一样。
但这失败了,因为在代码中,UglyGlobalFunc 是未定义的,这是有道理的。对于像window.UglyGlobalFunc.proto...
. 所以我的问题是:
动态加载的内容是否可以在执行时访问(需要发生魔法的地方)?或者直到 loadBigHairyCode() 返回并且浏览器经历某种刷新周期之后它们才变得“真实”?
如果是,那么我如何访问它们?某种 getGlobalVariableByName("string") 函数?
如果不是,那么... aieee。正常人是怎么做这种事的?