小编Ale*_*ill的帖子

浏览器内的javascript需要节点式吗?

是否存在任何用于浏览器内javascript的库,它们提供与Node相同的灵活性/模块性/易用性require

提供更多细节:原因require很好,它是:

  1. 允许从其他位置动态加载代码(在我看来,这比在HTML中链接所有代码更好)
  2. 它为构建模块提供了一致的界面
  3. 模块很容易依赖于其他模块(因此我可以编写一个需要jQuery的API,以便我可以使用 jQuery.ajax()
  4. 加载的javascript是作用域,这意味着我可以加载,var dsp = require("dsp.js");我将能够访问dsp.FFT,这不会干扰我的本地var FFT

我还没有找到一个能够有效地完成这项工作的库.我倾向于使用的解决方法是:

  • coffeescript-concat - 它很容易需要其他js,但你必须编译它,这意味着它不太适合快速开发(例如构建API in-test)

  • RequireJS - 它是流行的,直截了当的,并解决了1-3,但缺乏范围是一个真正的交易破坏者(我相信head.js是相似的,因为它缺乏范围,虽然我从来没有任何机会使用它.类似地,LABjs可以加载并.wait()确实缓解依赖性问题,但它仍然没有确定范围)

据我所知,似乎有许多解决方案用于javascript的动态和/或异步加载,但它们往往具有与从HTML加载js相同的范围问题.最重要的是,我想要一种加载不会污染全局命名空间的javascript的方法,但仍允许我加载和使用库(就像节点的要求一样).

编辑(我的答案):自写这篇文章以来,我已广泛使用RequireJS(现在有更清晰的文档).在我看来,RequireJS确实是正确的选择.我想澄清一下系统如何适用于那些和我一样困惑的人:

您可以require在日常开发中使用.模块可以是函数返回的任何内容(通常是对象或函数),并且作为参数确定范围.您还可以将项目编译为单个文件以进行部署r.js(实际上,这几乎总是更快,即使require可以并行加载脚本).

RequireJS和node-style之间的主要区别就像browserify(由tjameson建议的一个很酷的项目)使用的是模块的设计和要求:

  • RequireJS使用AMD(异步模块定义).在AMD中,require获取要加载的模块(javascript文件)列表和回调函数.当它加载了每个模块时,它会调用每个模块的回调作为回调的参数.因此,它是真正的异步,因此非常适合网络.
  • Node使用CommonJS.在CommonJS中,require是一个阻塞调用,它加载模块并将其作为对象返回.这适用于Node,因为文件从文件系统读取,这足够快,但在Web上运行不佳,因为同步加载文件可能需要更长的时间.

实际上,许多开发人员在看到AMD之前都使用过Node(因此也使用了CommonJS).此外,许多库/模块是为CommonJS编写的(通过向exports对象添加内容)而不是为AMD 编写(通过从define函数返回模块).因此,许多支持Node的Web开发人员希望在Web上使用CommonJS库.这是可能的,因为从<script>标签加载是阻塞的.像browserify这样的解决方案采用CommonJS(Node)模块并将它们包装起来,以便您可以将它们包含在脚本标记中.

因此,如果您正在为Web开发自己的多文件项目,我强烈推荐RequireJS,因为它确实是Web的模块系统(尽管在公平披露中,我发现AMD比CommonJS更自然).最近,区别变得不那么重要了,因为RequireJS现在允许您基本上使用CommonJS语法.另外,RequireJS可用于在Node中加载AMD模块(虽然我更喜欢node-amd-loader).

javascript load require scoping

73
推荐指数
5
解决办法
5万
查看次数

从localStorage删除:我应该使用delete还是.removeItem?

我正在使用localStorageChrome扩展程序.

它们之间是否存在差异delete localStorage[key],window.localStorage.removeItem(key)或者它们的行为是否相同?

请注意,我选择window.localStorage.removeItem(key)完全符合规范,但localStorage.removeItem(key)它是如何在野外看起来.

google-chrome local-storage

55
推荐指数
1
解决办法
5万
查看次数

为什么我应该使用OpenID进行身份验证而不是OAuth?

我反复阅读过,OpenID比OAuth(用于授权)更适合身份验证,包括SO上的其他几个帖子.

案例似乎也在这篇经常被引用的文章中提出.

但是,我有点不清楚为什么我应该支持OpenID进行身份验证,而不是一个诚实的OAuth提供商(例如Twitter或Facebook OAuth 2.0).我读过其他SO帖子解释了不同的使用情况,我的理解之间什么协议被设计为做差价,但他们没有解释为什么一个人不能使用OAuth认证.

以下是我能提出的原因以及我(可能是误入歧途)的回复:

  1. OAuth真的用于授权.让用户使用OAuth进行身份验证可以为消费者提供比他们需要的更多权限.
    • 回复:这通常是正确的,但在细粒度OAuth(例如Facebook提供)的情况下,它只允许我只请求非常小的权限.事实上,Facebook等许多网站都提供OAuth,但不提供OpenID,可能是因为他们对授权消费者比认证客户更感兴趣.如果我想为客户提供更多身份验证选项,OAuth似乎会向我提供这些选项.
  2. OAuth会话往往寿命更长
    • 回复:如果我是消费者意图对客户进行身份验证,则无关紧要; 我会做自己的会话管理,甚至可以在我完成用户身份验证后立即删除OAuth令牌.

与使用大规模OAuth提供程序进行身份验证相比,OpenID提供了哪些身份验证优势?

security openid oauth

23
推荐指数
2
解决办法
6568
查看次数

从node.js shell获取我的操作系统

如何从节点shell访问我的操作系统?

上下文:我正在节点中编写一个脚本,我想用默认程序打开一个文件,执行此操作的命令因操作系统而异.

我已经尝试过标准的javascript获取操作系统的方法,但它们没有用(原因很明显,navigator节点中没有).

是否可以在不安装非标准模块的情况下执行此操作?

javascript operating-system node.js

17
推荐指数
3
解决办法
2万
查看次数

有没有办法从浏览器运行服务器或点对点?

标题基本上都说明了一切.我知道这不能用传统手段来完成.我不知道有什么方法可以使用Web套接字,但我从来没有用它们构建任何玩具应用程序.

如果解决方案是特定于浏览器的(即使在客户端;即点对点通信也很棒),这很好.例如,有没有办法使用Chrome的NaCl来实现这一目标?

此外,如果现在不可能做到这一点,是否有任何关于它将来如何运作的充实规范?例如,基于Chromium的浏览器正在尝试"P2P Javascript API",它似乎目前完全没有文档记录.

以下是关于它的HTML5规范:http: //www.whatwg.org/specs/web-apps/current-work/multipage/video-conferencing-and-peer-to-peer-communication.html#peer-to-peer连接,但其状态尚不清楚.

对不起,如果这个问题有点杂乱无章; 我基本上对可用于p2p通信的所有浏览器内API的当前状态感兴趣.

编辑:我对Flash p2p不感兴趣.我知道它可以完成,绝对是当前p2p问题的解决方案,但我对新技术感兴趣.

2012年5月更新:对于那些仍在关注此问题的人来说,peerconnection API正慢慢进入浏览器.它现在已经在Chrome中实验,以及WebRTC API的其余部分. 您可以在此处查看文档和规范.

javascript browser html5 p2p

17
推荐指数
1
解决办法
610
查看次数

使用Chromium WebAudio API的纯javascript生成音调

如何仅使用javascript和Chromium的WebAudio API生成音调(例如纯正弦波)?

我想完成像Firefox一样东西.

铬WebAudio演示这里似乎都使用预先录制的<audio>内容.

谢谢!

audio html5 google-chrome chromium web-audio-api

10
推荐指数
2
解决办法
8237
查看次数

在Django-Tastypie中使用POST的ForeignKey问题

我正在使用django-tastypie构建一个简单的API.我的想法是有两个资源:

  • 表示用户留下一张纸条资源.只有创建Note的用户才能编辑它.
  • 一个评论资源.任何用户都可以在任何备注上留下评论.

TL; DR:我无法将Note编辑限制为Note的创建者,同时仍然允许任何用户对Note进行评论.

我使用以下设置进行身份验证:

class CreatedByEditAuthorization(Authorization):
    def is_authorized(self, request, object=None, **kwargs):
        return True

    def apply_limits(self, request, object_list):
        if request and request.method != 'GET' and hasattr(request, 'user'):
            return object_list.filter(created_by=request.user)
        return object_list
Run Code Online (Sandbox Code Playgroud)

简而言之,用户仅被授权编辑与created_by属性相等的对象(他们只能编辑他们创建的对象).

这连结如下:

class NoteResource(ModelResource):
    comments = fields.ToManyField('myapp.api.resources.CommentResource', 'comments', null=True, blank=True)
    created_by = fields.ToOneField('account.api.resources.UserResource', 'created_by')

    def obj_create(self, bundle, request, **kwargs):
        return super(HapResource, self).obj_create(bundle, request, created_by=request.user)

    class Meta:
        queryset = Note.objects.all()
        allowed_methods = ['get', 'put', 'post']
        authorization = CreatedByEditAuthorization()
Run Code Online (Sandbox Code Playgroud)

所以在这里,当创建一个对象时,我会自动将当前用户附加到该created_by属性并将其链接到正确的授权.

一个Comment十分简单,只是有 …

api django tastypie

9
推荐指数
1
解决办法
2761
查看次数

在后台提交表格

如何在没有导致页面重新加载(即在后台)的情况下将表单提交给第三方网站?

对于某些背景,我正在尝试以编程方式在后台将用户登录到他们的Google帐户.

我可以使用以下代码以编程方式登录它们:

var div = document.createElement("div");
div.innerHTML = FORM_HTML;
var form = div.getElementsByTagName("form")[0];
form.action = "https://www.google.com/accounts/ServiceLoginAuth";
form.GALX.value = FORM_GALX; // dynamically obtained using AJAX
form.Email.value = USER_EMAIL;
form.Passwd.value = USER_PASSWORD;
form.submit();
Run Code Online (Sandbox Code Playgroud)

这会让我登录并打开我的Google信息中心.我怎样才能防止form.action重定向?

请注意,此div实际上从未添加到文档中,这是首选但不是必需的.

html javascript forms

6
推荐指数
1
解决办法
9896
查看次数

聊天应用程序:node.js还是APE?

我想创建一个聊天应用程序,它将使用php/codeigniter来执行视图和用户界面.我一直在阅读很多关于stackoverflow的帖子,推荐使用node.js或socket.io.然而,我也遇到了APE(Ajax Push Engine).我对这两者都不太了解,并且想知道要使用哪个.

我读了node.js并看到了很多关于它的好东西,但令我担心的主要问题是它相对较新并且没有很多真实世界的网站测试/使用它.

另一方面,APE确实如此.它看起来类似于node.js. 但就像我说的那样,我不知道要么知道选择哪一个.

哪一个更适合创建聊天应用?

谢谢!

chat ape node.js socket.io

6
推荐指数
2
解决办法
2949
查看次数

如果资源已经存在,我如何才能使Django-Tastypie覆盖资源?

我正在使用一些简单的django-tastypie资源,存在以下问题:

想象一下,我正在构建一个简单的评级系统.我有一个资源,称之为Ratinga User和a Comment.每个用户每个评论最多有一个评级.

我想制作一个带有元组的通用资源('user', 'comment').然后,每当我使用新的POST进行POST时Rating,我都希望检查usercomment字段以查看是否已经存在与这两个字段匹配的评级.如果是,则覆盖现有资源,否则创建新资源(这样任何API调用都将始终传递Django的unique_together).

我正在努力obj_get作为一个起点,但很难理解如何正确地覆盖它以获得这种行为.

python django tastypie

6
推荐指数
1
解决办法
1754
查看次数

使用HTML5麦克风录制音频?

是否可以在任何当前的浏览器中使用(例如,Chrome Canary)?

我见过的所有工作实例都是语音到文本.是否可以录制音频或将其流式传输到服务器?

2012年4月30日更新: getUserMedia API非常适合浏览器.它是Opera的最新版本,显然在Chromium正在进行中.

如果您想了解它的工作方式,请参阅:http://www.html5rocks.com/en/tutorials/getusermedia/intro/

audio html5

5
推荐指数
1
解决办法
8079
查看次数

在OpenGL ES for iPhone中请求DepthBuffer

我正在iPhone上创建一个3D OpenGL ES视图,并且想要设置一个深度缓冲区,所以我可以使用它.我正在打电话glEnable(GL_DEPTH_TEST)等等,但因为我没有设置z-buffer,它什么也没做.

我正在寻找一个等效的电话 glutInitDisplayMode(GLUT_DEPTH)

任何帮助都是最受欢迎的.谢谢!

iphone opengl-es objective-c

3
推荐指数
1
解决办法
2785
查看次数