前文:讨论 JDK6 包含javascript.....
江南白衣 12:06:41
一直有个疑问, a.js如何include b.js....js的封装,管理性比较弱噢.
buaawhl 12:07:24
我看到一个 jspackage的项目,
buaawhl 12:07:45
就是模仿java的import pakage ,管理js
江南白衣 12:08:12
那爽阿,现在项目里N多js文件,互相又不能include.....
url?
buaawhl 13:55:29
http://jspackaging.sourceforge.net/
buaawhl 13:55:50
http://jspackaging.sourceforge.net/examples/Examples.html
phalanger 14:11:46
原来是要用createElement,而不是document.write
江南白衣 14:12:34
谢谢,问题又解决掉一个:)
buaawhl 14:12:54
这个只能用在客户端?
江南白衣 14:13:07
main.js
JSLoad ("scripts/com/iskitz/js/packaging/examples/JSLoadExample.js");
if(typeof isJSLoaded != "undefined")
{
isJSLoaded();
}
JSLoadExample.js ::
function isJSLoaded()
{
alert("JSLoad was successful!");
}
江南白衣 14:13:12
so easy for use.
buaawhl 14:14:04
/*--------------------------------------------------------------------------+
| JSLoad (url // String - Scripts location (i.e. http://.../a.js)
| [, container] // Object - Window with script loading capability
| [, type] // String - Type of script (i.e. text/javascript)
| [, defer] // Boolean - Flag for delaying script processing
| [, language] // String - Language script is written in.
| [, title]) // String - Title for loaded script
|+--------------------------------------------------------------------------+
| Loads external JavaScripts; used by Import.
*--------------------------------------------------------------------------*/
function JSLoad(url, container, type, defer, language, title)
{
// verify / attain container
if(container == undefined || container == null) container = this;
// setup container
if(typeof container.write == "undefined")
if(typeof container.document != "undefined")
container = container.document;
else throw "Invalid container. Unable to load [" + url + "]";
// no type set
if(type == undefined || type == null)
{
type = '';
// no language so set default type
if(language == undefined || language == null)
{
language = undefined;
type = "text/javascript";
}
}
// set default language
if(language == undefined || language == null) language = "JavaScript";
// set title
if(title == undefined || title == null) title = '';
// set defer
if(defer == undefined) defer = false;
// build the script object
var script = container.createElement("script");
script.defer = defer;
script.language = language;
script.title = title;
script.type = type;
script.src = url;
// dynamically load the script via it's container
var head = container.getElementsByTagName("head")[0];
head.appendChild(script);
}
/*--------------------------------------------------------------------------+
| JSPackage (packageID // String - Fully-qualified package name
| [, owner]) // Object - Container
|+--------------------------------------------------------------------------+
| Createa a uniquely-named package to encapsulate JavaScript functionality.
*--------------------------------------------------------------------------*/
function JSPackage(packageID, owner)
{
var _package = (owner == undefined || owner == null) ? window : owner;
packageID = packageID.split('.');
// load / create the package
for(var i=0, j=packageID.length; i < j; i++)
if(typeof _package[packageID[i]] == "undefined")
_package = _package[packageID[i]] = {};
else
_package = _package[packageID[i]];
// attempt to complete any pending imports
CompleteImports(owner);
return _package;
}
/*--------------------------------------------------------------------------+
| JSPackageException (String packageID)
|+--------------------------------------------------------------------------+
| Used to catch JSPackage exceptions caused by invalid package ids.
*--------------------------------------------------------------------------*/
function JSPackageException(packageID)
{
this.name = _pathPacked + ".JSPackageException";
this.message = "Invalid package name [" + packageID + "]";
this.toString = function ()
{
return "[" + this.name + "] :: " + this.message;
};
}
buaawhl 14:15:05
JSLoad好像是依靠生成 <script import>来引入js file的
buaawhl 14:15:29
需要一个Container。应该是browser 里面的HTML DOM
phalanger 14:17:44
关键就在这里吧:
var script = container.createElement("script");
script.defer = defer;
script.language = language;
script.title = title;
script.type = type;
script.src = url;
// dynamically load the script via it's container
var head = container.getElementsByTagName("head")[0];
head.appendChild(script);