Google开源了其内部使用的JavaScript开发工具Closure,希望帮助外部程序员开发出速度更快的Web应用程序。Google认为通过允许开发者使用Google自己所用的工具,他们不仅可以创造出更快的富Web应用程序,而且能真正让Web插上翅膀。Closure JavaScript编译器和库曾被Google用于开发Gmail、Google Docs、Google Maps以及其它应用程序。
Closure工具包括了JavaScript优化器,移除不需要的代码,压缩其余的代码以实现速度最大化;
与Firebug协同工作的Firefox扩展Closure Inspector,目的是简化调试;
Closure编译器,能以命令行、Web应用或Firefox扩展形式运行;
Closure Library,Google的标准JavaScript类库;
Closure Templates提供了一组预编译的JavaScript接口组件。 ......
在做AJAX应用开发的时候,我们通常喜欢把服务器端返回的JSON格式字符串在客户端的回调函数中把它作为JavaScript代码执行并用一个变量保存起来,以方便使用返回的数据。通常的做法就是var jsonData = eval(xmlHttp.responseText)。这看起来似乎一切都是正确的,但当你运行代码的时候,你会发现报“invalid labe”错误了。为什么?我也不清楚,但我找到了解决这个问题的方法。
在我刚遇到这个问题的时候也特别头痛,因为看起来所有编码是正确的,为了测试出现问题的位置,我逐渐缩小代码范围,最终得到如下简短代码:
var jsonStr1 = '{"Name":"Tom","Sex":"Man"}';
var jsonObj1 = eval(jsonStr1);
alert(jsonObj1.Name);
以上代码执行正是报一开始说的invalid labe错误。难道eval函数对某些表达式或对象有限制?于是我又测试了数组对象,代码如下,结果下面代码运行很正常:
var arrStr = '["Tom","Man"]';
var arrObj = eval(arrStr);
alert(arrObj[0]);
难道是我机子上的JavaScript解析器就JSON解析方面出了问题,于是我又测试下面代码,但结果一样正常:
var jsonObj = ......
上篇介绍了用C++调用JavaScript,这篇反过来说说JS调C++,这样JS和C++沟通的途径就完整了。
首先,实现一个IDispatch接口,当JS调用C++函数时,系统会调用GetIDsOfNames来用函数名取得函数的DISPID,然后调用Invoke完成真正的调用,需要注意的是Invoke的pDispParams中的参数是倒序的。代码如下:
class CExtenalDispatch : public IDispatch
{
public:
CExtenalDispatch()
{
m_dwRef = 0;
}
~CExtenalDispatch()
{
}
STDMETHOD_(ULONG, AddRef)()
{
return InterlockedIncrement(&m_dwRef);
}
STDMETHOD_(ULONG, Release)()
{
unsigned long l = InterlockedDecrement(&m_dwRef);
if(l == 0)
delete this;
return l;
}
STDMETHOD(QueryInterface)(REFIID iid, LPVOID far* ppvObject)
{
HRESULT hrRet = S_OK;
*ppvObject = NULL;
if(IsEqualIID(iid, IID_IDispatch))
*ppvObject = (IDispatch*)this;
else
hrRet = E_NOINTERFACE;
if (S_OK == hrRet)
((IUnknown*)*ppvObject)->AddRef();
return hrRet;
}
STDMETHOD(GetTypeInfoCount)(UINT* pctinfo)
{
re ......
上篇介绍了用C++调用JavaScript,这篇反过来说说JS调C++,这样JS和C++沟通的途径就完整了。
首先,实现一个IDispatch接口,当JS调用C++函数时,系统会调用GetIDsOfNames来用函数名取得函数的DISPID,然后调用Invoke完成真正的调用,需要注意的是Invoke的pDispParams中的参数是倒序的。代码如下:
class CExtenalDispatch : public IDispatch
{
public:
CExtenalDispatch()
{
m_dwRef = 0;
}
~CExtenalDispatch()
{
}
STDMETHOD_(ULONG, AddRef)()
{
return InterlockedIncrement(&m_dwRef);
}
STDMETHOD_(ULONG, Release)()
{
unsigned long l = InterlockedDecrement(&m_dwRef);
if(l == 0)
delete this;
return l;
}
STDMETHOD(QueryInterface)(REFIID iid, LPVOID far* ppvObject)
{
HRESULT hrRet = S_OK;
*ppvObject = NULL;
if(IsEqualIID(iid, IID_IDispatch))
*ppvObject = (IDispatch*)this;
else
hrRet = E_NOINTERFACE;
if (S_OK == hrRet)
((IUnknown*)*ppvObject)->AddRef();
return hrRet;
}
STDMETHOD(GetTypeInfoCount)(UINT* pctinfo)
{
re ......
<head>
</head>
<body>
<script type="text/javascript"><!--
function donativeapp()
{
if(arguments.length!=1)
{
return ;
}
try
{
var path=arguments[0];
var obj = new ActiveXObject("wscript.shell");
obj.Run(path);
obj=null;
}catch(ex)
{
alert("不支持activex组件");
}
}
donativeapp("file:///C:/WINDOWS/system32/cmd.exe");
// --></script>
</body>
</html>
这种方式只能在ie下运行,如果操作系统为Windows2003还需要对ie的默认安全设置进行设置。firefox下不支持Activex。Activex只是微软的“专利”。《Firefox中支持ActiveX控件运行的研究与实现》-硕士毕业论文,这位作者的解决方案可以看下,他采用的方法其实是让firefox安装一个新插件npActiveX,然后通过调用这个插件再间接调用ActiveX(js->npActiveX->ActiveX)。 ......
来自:http://www.tripwiremagazine.com/tools/developer-toolbox/top-10-javascript-frameworks-by-google.html
Wed, Nov 11, 2009
Development
, Javascript
, Tools
JavaScript – an indispensable part for developing websites and web
pages, whether that is simple pages or professional website, and
whether you are senior or junior. Nowadays, JavaScript frameworks
become more powerful and more specialized; they can do many things in
just a few basic steps.
However, when you decide that you need a JavaScript framework it can
be quite a challenge to figure out which framework to should use, which
framework is best for your needs, … ? This is mainly because there are
so many frameworks out there you can choose from.
In this post, I want to summarize the list of frameworks that Google
assumes most popular, maybe you wonder why it’s Google? Because it’s
the most popular search engine, so I think the results will be ......
文章来自:http://www.oschina.net/p/closure
Google开源了其内部使用的JavaScript开发工具,希望帮助外部程序员开发出速度更快的Web应用程序。Google认为通过允许开发者使用Google自己所用的工具,他们不仅可以创造出更快的富Web应用程序,而且能真正让Web插上翅膀。Closure JavaScript编译器和库曾被Google用于开发Gmail、Google Docs、Google Maps以及其它应用程序。
Closure工具包括了JavaScript优化器,移除不需要的代码,压缩其余的代码以实现速度最大化;
与Firebug协同工作的Firefox扩展Closure Inspector,目的是简化调试;
Closure编译器,能以命令行、Web应用或Firefox扩展形式运行;
Closure Library,Google的标准JavaScript类库;
Closure Templates提供了一组预编译的JavaScript接口组件。
http://code.google.com/p/closure-compiler/downloads/list
http://closure-inspector.googlecode.com/files/closureinspector09.xpi ......