我有一个类似于JSFiddle的工具,它允许我动态输入javascript并在页面上运行它.代码可以是多行,通常也是.
不幸的是,如果我输入的代码中有异常,如果我使用eval()来运行代码,我就无法得到异常的行号.
我找到了一个部分解决方案,而不是使用
try{
eval(code);
}
catch(e) {
processException(e);
}
Run Code Online (Sandbox Code Playgroud)
而是做这样的事情:
var s = document.createElement('script');
s.appendChild(document.createTextNode(
"try{\n" +
code +
"}catch(e){processException(e)}"));
document.body.appendChild(s);
Run Code Online (Sandbox Code Playgroud)
现在,如果代码抛出一个异常,我期待在堆栈跟踪(在我processException()函数),我可以得到异常的行号(在Firefox和Chrome,反正).
如果它实际上是一个运行时异常,例如未定义的变量,这一切都很好.问题是是否存在解析错误/语法错误,例如不匹配的parens等.我一无所获.
有没有任何疯狂的解决方法,至少适用于Firefox和Chrome?在Function对象中的脚本标记内的eval中的Eval?我正在尝试一切,但没有找到任何有用的东西.
我希望能够从YouTube视频中的各个点(不仅仅是缩略图)中提取帧,并对它们进行一些处理.我可以使用iframe API在我的网站中嵌入视频,但我很难找到将其捕获到画布的方法.(如果我被迫捕获整个屏幕,那就没关系了,如果我必须更改浏览器设置以允许它,那就没关系.)
我使用Express设置了一个Node服务器,使用Passport进行身份验证.我听说connect-mongo很适合用于持久登录会话,所以我设置好了,一开始看起来一切正常,用户会话会根据过期时间由mongo自动删除.但是,在生产中,对于每个用户会话,还有5000个永不过期的空会话,我无法弄清楚为什么mongo不会自动清理它们.mongo中空会话的示例条目如下所示:
{ "_id" : "JMtV5Z1oWRkgh9KIKlwSqwOE",
"session" : "{\"cookie\":{\"originalMaxAge\":86400000,\"expires\":\"2014-02-13T22:09:09.948Z\",\"httpOnly\":true,\"path\":\"/\"},\"passport\":{}}",
"expires" : Date( 1392329349948 ) }
Run Code Online (Sandbox Code Playgroud)
这是Express配置代码:
var express = require('express')
, passport = require('passport')
, fs = require('fs')
, http = require('http')
, https = require('https')
, util = require('util')
, mongoose = require('mongoose')
, MongoStore = require('connect-mongo')(express)
, FacebookStrategy = require('passport-facebook').Strategy
, LocalStrategy = require('passport-local').Strategy;
app.configure(function() {
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.logger());
app.use(requireHTTPS);
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.session({
secret: 'asdfasdf',
cookie: { maxAge: 24 * 60 * 60 …Run Code Online (Sandbox Code Playgroud) 如果我得到一个元素的 innerHTML,某些子元素应该有一个尾部斜杠作为有效的 XHTML(例如,“<br />”),但它们在 Chrome、Firefox 或 IE 中没有,无论文档类型如何.
显然这在大多数情况下并不重要,但在我的情况下,我使用从 DOM 中拉出 html 作为模板系统的一部分——所以如果这些反斜杠缺失,它们会进入使用这些反斜杠构建的结果页面模板,因此该页面不会验证为 XHTML。非验证页面似乎让我的客户感到难过。
所以....我正在寻找一些 javascript 代码(可能是一个正则表达式),它会在适当的地方添加反斜杠。如果它适用于这些元素类型,那对我来说就足够了:
area, base, br, col, embed, hr, img, input, link, meta, param
我想如果标签中的引号中有 > 就不必混淆了。
我知道有一个 dom-to-xml 库(http://xhtmljs.codeplex.com/)可以做到这一点,但它也可以做很多其他的事情,而且非常暴力。我希望有更简单的东西。
编辑:
好吧,因为我对字符串处理方法没有任何了解,所以我继续做了一些对我有用的事情。(虽然它会被引号中的 > 混淆,我稍后会处理):
var addClosingSlashes = function (htmlString) {
var elemTypes = [
"area", "base", "br", "col", "embed", "hr", "img", "input", "link", "meta", "param"];
var inString, outString = htmlString;
for (var i=0; i<elemTypes.length; i++) {
var index1 = 0, index2;
inString = outString;
outString = …Run Code Online (Sandbox Code Playgroud) 我正在使用javascript对javascript代码进行粗略的解析.我会不遗余力的细节,为什么我需要这样做,但我只想说,我不希望集成的代码库一大块,因为它是不需要我的目的,我保持这种非常轻便是非常重要的而且相对简单.所以请不要建议我使用JsLint或类似的东西.如果答案的代码多于您可以粘贴到答案中的代码,那么它可能比我想要的更多.
我的代码目前能够很好地检测引用的部分和注释,然后匹配括号,括号和parens(当然,确保不要被引号和注释混淆,或者在引号内转义).这就是我需要它做的全部,并且它做得很好......但有一个例外:
它可能会被正则表达式文字混淆.所以我希望在javascript字符串中检测正则表达式文字有一些帮助,所以我可以适当地处理它们.
像这样的东西:
function getRegExpLiterals (stringOfJavascriptCode) {
var output = [];
// todo!
return output;
}
var jsString = "var regexp1 = /abcd/g, regexp1 = /efg/;"
console.log (getRegExpLiterals (jsString));
// should print:
// [{startIndex: 13, length: 7}, {startIndex: 32, length: 5}]
Run Code Online (Sandbox Code Playgroud) 我在Heroku上使用Node.js,并使用MongoHQ获取数据.
我的应用程序需要能够存储从用户上传或从其他网站下载的图像文件.我不是在寻找附加组件来进行图像处理等,我只需要能够存储它们并为它们提供服务.如果我只是从我的Node应用程序中引用它们作为数字ID等,那就没问题了.
由于这是一个单人的,自筹资金的项目,我希望尽可能便宜地做到这一点(我不想为附加组件支付很多费用)并且更喜欢在Heroku上保留所有内容以简化(虽然后者不是要求,只是偏好).我知道我可以将它们存储在Mongo中作为二进制文件,但我正在寻找更高效的东西,并且希望每兆存储更便宜.
我需要将文件从node.js应用程序推送到其他地方运行的Web服务器,该服务器通过典型的上载机制接受文件.例如,假设接收服务器有一个页面,其形式如下:
<form enctype="multipart/form-data" action="upload.php" method="POST">
file: <input name="uploaded" type="file" /><br />
name: <input type="text" name="filename" /><br />
<input type="submit" value="upload" />
</form>
Run Code Online (Sandbox Code Playgroud)
如果用户选择文件,然后在文本输入字段中给出文件名,则该文件将通过upload.php(我无法控制)上传到服务器,并保存为提供的名称.(表单上可能还有其他项目,但为了简单起见,我只展示了那些项目).php脚本将以"ok"或"error ..."(带错误)的简单文本响应进行响应.
现在,我希望能够以编程方式将node.js中的文件发送到该php脚本.该文件(在node.js端)可能存在也可能不存在于文件系统中,或者它可能是来自其他地方的东西,例如我可能从网址中删除它,它可能是由用户上传的,等等
我已经看到了这些方面的一些东西,但我不知道如何处理参数(文件名等),也不确定在options对象中提供什么.此示例还假设它来自文件系统文件,正如我所说,可能是也可能不是.
fs.createReadStream(filename).pipe(http.request(options, function(response) {
}));
Run Code Online (Sandbox Code Playgroud) 我需要以编程方式滚动MapView以确保某些内容在视图中.我知道每个方向需要滚动多少像素.我看到方法(在MapController中)将它设置为特定GeoPoint的动画,并按像素滚动它而不用动画.但是没有像素一样用动画来做.
有什么简单的方法可以做到这一点?
我希望能够调用一个函数,它将在调用函数中设置一个或多个局部变量.例如:
function someFunc () {
loadTranslatedStrings($LOCALS, "spanish");
echo $hello; // prints "hola";
}
function loadTranslatedStrings (&$callerLocals, $lang) {
if ($lang == 'spanish')
$callerLocals['hello'] = 'hola';
else if ($lang == 'french')
$callerLocals['hello'] = 'bonjour';
else
$callerLocals['hello'] = 'hello';
}
Run Code Online (Sandbox Code Playgroud)
(我猜这是不可能的,但不妨问......)
它显然适用于Google TV(适用于Android应用,而非html5应用),所以我很好奇我们是否能够将它们编码为HLS(Http Live Streaming)以与Chromecast一起使用?
javascript ×5
node.js ×3
regex ×2
android ×1
express ×1
google-cast ×1
heroku ×1
html5-canvas ×1
mongodb ×1
mongoose ×1
parsing ×1
passport.js ×1
php ×1