使用javascript根据需要注入脚本引用?

Fly*_*wat 12 javascript include

我有一个JS函数,可能偶尔会在某些页面上使用.它依赖于另一个JS文件(swfObject.js),但我想避免必须在整个地方都包含这个文件,因为大多数情况下这都是浪费的请求.

相反,我想创建一个可以根据需要将脚本引用注入页面DOM的泛型函数,因此如果调用此函数,它将检查脚本,如果它不存在,则加载它.

我很确定这是可能的(我不打算使用document.write),但在我冒险进入未知领域之前,有没有人之前做过这个,如果有的话,还有什么指针?

编辑:好的,我试过了,它适用于IE6和FF,我还没有测试过其他浏览器.

这是我的代码(Rev 2.0,现在有可选的回调):

function loadJSInclude(scriptPath, callback)
{
    var scriptNode = document.createElement('SCRIPT');
    scriptNode.type = 'text/javascript';
    scriptNode.src = scriptPath;

    var headNode = document.getElementsByTagName('HEAD');
    if (headNode[0] != null)
        headNode[0].appendChild(scriptNode);

    if (callback != null)    
    {
        scriptNode.onreadystagechange = callback;            
        scriptNode.onload = callback;
    }
}
Run Code Online (Sandbox Code Playgroud)

并在具有依赖性的方法中:

var callbackMethod = function ()
{
    // Code to do after loading swfObject
}

// Include SWFObject if its needed
if (typeof(SWFObject) == 'undefined')    
    loadJSInclude('/js/swfObject.js', callbackMethod);
else
    calbackMethod();
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Jim*_*ato 0

查看 YUI Loader 实用程序。它是超级方便、不引人注目的 JavaScript,用于按需加载脚本。

以下是使用非 YUI 脚本的示例的链接:

http://developer.yahoo.com/yui/examples/yuiloader/yl-addmodule.html