我正在使用nodejs 0.4.7来发出请求,这是我的代码:
var post_data = JSON.stringify({
'compilation_level' : 'ADVANCED_OPTIMIZATIONS',
'output_format': 'json',
'warning_level' : 'QUIET',
'js_code' : code
});
var post_options = {
host: 'closure-compiler.appspot.com',
port: '80',
path: 'compile',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': post_data.length
}
};
var post_req = http.request(post_options, function(res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('Response: ' + chunk);
});
});
post_req.write(post_data);
post_req.end();
Run Code Online (Sandbox Code Playgroud)
我得到的回应是
Response: <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我究竟做错了什么 ?在教程中它说我很乐意向http://closure-compiler.appspot.com/compile发出POST请求...
使用Google Closure库:
如何处理单击element例如a div但阻止event handler在用户单击该元素的子元素时触发.
例如,在下面的代码中我想触发event handler用户单击时,div1但是当他/她单击"span1"时,我希望event handler在不触发处理程序的情况下调用另一个div1.
<div style="width: 400px" id="div1">
<span id="span1">click me to reload</span>
click here to Toggle accordion
</div>
Run Code Online (Sandbox Code Playgroud)
UPDATE
JS代码:
/**** accordion ***/
var panels = goog.dom.getElementsByClass('newsColumnHeader', goog.dom.getElement('accordionContainer'));
var anims = {};
var open = null;
goog.array.forEach(panels, function(pane){
var animation = new goog.ui.AnimatedZippy(pane, goog.dom.getNextElementSibling(pane));
goog.events.listen(animation, goog.ui.Zippy.Events.TOGGLE, zippyToggle);
anims[goog.getUid(animation)] = animation;
});
function zippyToggle(event) {
var uid = goog.getUid(event.target);
// simple …Run Code Online (Sandbox Code Playgroud) javascript events javascript-events google-closure google-closure-library
我正在使用Google Closure的事件处理方式:
goog.events.listen(this.contentElement, goog.events.EventType.CLICK, this.openEditor);
Run Code Online (Sandbox Code Playgroud)
但是我需要将一个字符串作为参数传递给函数 this.openeditor
我查看了文档,但似乎无法解决如何做到这一点,任何人有任何想法?
谢谢!
javascript events click google-closure google-closure-library
http://closure-compiler.appspot.com/home
(function(){
var somevar = 'somevar';
this.each(function(){
var minify_var = {
method1: somevar + '1',
method2: somevar + '2',
method3: somevar + '3',
method4: somevar + '4',
method5: somevar + '5'
};
alert(minify_var);
});
})();
Run Code Online (Sandbox Code Playgroud)
像这样的代码缩小为:
(function(){this.each(function(){alert({method1:"somevar1",method2:"somevar2",method3:"somevar3",method4:"somevar4",method5:"somevar5"})})})();
Run Code Online (Sandbox Code Playgroud)
这个长度肯定比(+11个符号)更大:
(function(){var a="somevar";this.each(function(){alert({method1:a+"1",method2:a+"2",method3:a+"3",method4:a+"4",method5:a+"5"})})})();
Run Code Online (Sandbox Code Playgroud)
问题是,我们有两个变量,但有一个变量.
实际上它对于一个小脚本来说并不坏,但是对于一个大脚本可能会受到伤害.
添加第一个变量以使缩小的代码更小,但谷歌忽略它.
它也忽略了大多数像这样的其他大小优化技巧.
可以修复吗?
这个问题是关于Google Closure,而不是JavaScript模式.
我运行非常基本的文件:
goog.provide('test');
goog.require('goog.net.XhrIo');
goog.require('goog.json.Serializer');
goog.require('goog.dom');
goog.require('goog.ui.HoverCard');
goog.require('goog.positioning');
goog.require('goog.dom.dataset');
Run Code Online (Sandbox Code Playgroud)
但我明白了
test.js:3: ERROR - required "goog.net.XhrIo" namespace never provided
goog.require('goog.net.XhrIo');
Run Code Online (Sandbox Code Playgroud)
在编译时
java -d32 -client -jar compiler/compiler.jar --js compiler/closure-library/closure/goog/base.js --js test.js --warning_level=VERBOSE
Run Code Online (Sandbox Code Playgroud)
如何找到goog库?
编辑:
我也尝试使用在线版:http://closure-compiler.appspot.com/home并仍然获得:
JSC_MISSING_PROVIDE_ERROR: required "goog.net.XhrIo" namespace never provided at line 3 character 0 in test.js
goog.require('goog.net.XhrIo');
^
JSC_MISSING_PROVIDE_ERROR: required "goog.json.Serializer" namespace never provided at line 4 character 0 in test.js
goog.require('goog.json.Serializer');
^
JSC_MISSING_PROVIDE_ERROR: required "goog.dom" namespace never provided at line 5 character 0 in test.js
goog.require('goog.dom'); …Run Code Online (Sandbox Code Playgroud) google-closure google-closure-library google-closure-compiler
我是否可以编写自己的Java Main Class来调用compiler.jar中的方法.
我想多次调用编译器,不想编写代码来使用Runtime.exec,也不想在每次调用之前等待Java加载.
我可以使用setProperties设置元素,但似乎没有getProperties来获取属性值.有人可以帮忙吗?
我想使用 Clojurescript 更改浏览器中页面的标题。我正在使用 Google Closure 进行 dom 操作,我对 Closure 中的函数持开放态度来执行此操作。
在纯 javascript 中,你可以这样做:
window.document.title = "pants";
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚它是如何转化为 Clojurescript 的。
我正在使用google-closure-compilergulp来缩小我的angularjs文件.
我在app/js文件夹中有3个js文件.他们是controller.js, app.js, services.js.
这是我的gulpfile代码:
var closureCompiler = require('google-closure-compiler').gulp();
gulp.task('js-closure', function () {
return gulp.src('app/js/*.js', {base: './'})
.pipe(closureCompiler({
compilation_level: 'SIMPLE_OPTIMIZATIONS',
warning_level: 'QUIET',
language_in: 'ECMASCRIPT6_STRICT',
language_out: 'ECMASCRIPT5_STRICT',
output_wrapper: '(function(){\n%output%\n}).call(this)',
js_output_file: 'output.min.js'
}))
.pipe(gulp.dest('./dist/js'));
});
Run Code Online (Sandbox Code Playgroud)
代码的作用是将3个js文件编译成单个文件 output.min.js
我想要的是将3个js文件编译成3个独立的js文件 controller.min.js, app.min.js, services.min.js