我想允许我的应用程序的用户在Javascript中编写扩展其功能的插件,而不允许访问除我提供的插件API对象之外的任何内容.例如,插件可能如下所示:
plugin.hookSomeUserAction(function() {
plugin.doSomethingWickedAwesome();
document.title = 'hacked!'; //shouldn't work
});
Run Code Online (Sandbox Code Playgroud)
Caja看起来应该能够完成工作,但文档可能是我见过的任何开源项目中最糟糕的(非常成就!).我需要一些帮助来设置系统.
我已经在命令行上使用了cajoler,并且我已经将一个这样的插件哄骗到某种有希望被清理的Javascript中.困惑的Javascript看起来像是期待提供一个"IMPORTS___"对象,它应该包含插件可以访问的所有东西.到目前为止很有前途!
不幸的是,让那个惹恼Javascript的文件实际加载并运行已经变成了一个真正的混乱.不幸的是,文档中的源代码段完全错误,因为函数loadCaja实际上并没有出现在google-caja的当前主干中的任何位置.我找到了一些代码,至少做了些什么:
<div id="plugin"></div>
<script>
caja.configure({
cajaServer: "/js/caja"
}, function(frameGroup) {
frameGroup.makeES5Frame(document.getElementById('plugin'),
{ /* No network access */ },
function(frame) {
frame.url('/js/plugins/test.js')
.run({});
}
);
});
</script>
Run Code Online (Sandbox Code Playgroud)
不幸的是,它的作用是尝试让cajoler重新调整我已经哄骗过的javascript.我绝对不想让服务器在每个请求上重新调用每个插件; 我只是在上传时将其哄骗并将其存储起来以备使用.
我也找不到任何关于如何或在何处指定IMPORTS___内容的文档(鉴于这是整个安全模型,它似乎是文档中的一个奇怪的疏忽).是传递给.run()的对象吗?
在我的specs2测试中,我经常使用辅助函数来同时测试一组条件.不幸的是,这使得失败测试的行号输出无效,因为所有失败都在同一行.
谷歌出现了一个"故障转移"选项,它将输出堆栈失败的痕迹.但是,我找不到如何实际使用它的示例.它在build.sbt吗?它是否在SBT命令行中使用?它是否在Specification类的构造函数中以某种方式设置?
我有一个使用太多内存的JavaScript应用程序.它不会崩溃选项卡,但可能需要几分钟才能加载,其中大部分都用在GC中.我正在使用堆分析器来查看分配最多内存的函数,这非常有效.
有没有办法让Chrome允许每个进程有更大的JS堆,这样我就可以在不等待GC分钟的情况下减少内存压力的测试运行?也许是我找不到的命令行参数?
我试图沿两条路径一个接一个地有一个精灵(下面的"指针").这是我的代码:
scene.attachChild(pointer);
pointer.clearEntityModifiers();
pointer.registerEntityModifier(new MoveModifier(
1.0f, 540, 960, 1000, 1000,
new IEntityModifierListener() {
public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) {}
public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) {
clickSound.play();
pointer.clearEntityModifiers();
pointer.registerEntityModifier(new MoveModifier(
1.0f, pointer.getX(), pointer.getY(), 500, 2500,
new IEntityModifierListener() {
public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) {}
public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) {
pointer.clearEntityModifiers();
pointer.detachSelf();
}
},
EaseCubicInOut.getInstance()
));
}
},
EaseCubicInOut.getInstance()
));
Run Code Online (Sandbox Code Playgroud)
指针按预期沿第一个路径移动,然后clickSound播放,然后没有任何反应.第二个MoveModifier没有任何效果.我在这做错了什么?
在javascript中,我可以使用foo.caller在堆栈跟踪中获取对foo之上的函数的引用.但是,当函数在同一堆栈跟踪中多次出现时,这不起作用,foo.caller只返回foo.
是否有一种稳定的,跨平台的方法来获取Javascript中的完整堆栈跟踪?我不希望得到一个可打印的堆栈跟踪; 相反,我正在进行堆栈检查以查看某个方法是否位于堆栈中的任何位置.这是我目前的代码:
function inFunction(foo) {
var caller = inFunction.caller;
var maxDepth = 20;
while(caller && --maxDepth > 0) {
if(caller == foo)
return true;
caller = caller.caller;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何处理堆栈跟踪中多次存在的函数?
我正在使用一个需要java.io.File作为输入的API,但我想发送一个字节数组的API.有没有办法创建一个File对象,它将从我的字节数组而不是从磁盘读取?
考虑Scala中的以下函数:
def wrapMyFunction[A](foo: =>A):A = {
try {
foo
}
catch { case e =>
//Return whatever the "empty" or "default" instance of type A would be,
//such as 0, "", None, List(), etc.
}
}
Run Code Online (Sandbox Code Playgroud)
给定类型参数A,如何获得类型A的"空"或"默认"值?它甚至可能吗?
我在PHP中使用cURL将POST到正在创建资源的端点。它返回201响应,并带有Location标头,该标头给出了所创建资源的URL。我还在响应的正文中获得了一些信息。
获取响应的纯文本主体以及获取位置标头的值的最佳方法是什么?curl_getinfo不返回该标头,当我这样做时:
curl_setopt($ch, CURLOPT_HEADERFUNCTION, function($ch, $header) {
var_dump($header);
});
Run Code Online (Sandbox Code Playgroud)
我只看到一个标头转储了出来,即“ HTTP / 1.1 201 Created”响应代码。
该角2 ES5小抄说,要做到这一点:
var MyComponent = ng.router.RouteConfig([
{ path: '/:myParam', component: MyComponent, as: 'MyCmp' },
{ path: '/staticPath', component: ..., as: ...},
{ path: '/*wildCardParam', component: ..., as: ...}
]).Class({
constructor: function() {}
});
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何指定@Component该类的东西,以便我可以实际实例化它.例如,
ng.router.RouteConfig([...]).Component({})
Run Code Online (Sandbox Code Playgroud)
抛出异常,因为结果.RouteConfig没有.Component方法.同样,结果.Component没有.RouteConfig方法.你如何设置这个?
我有一个接收消息的演员 - 也就是说,它通常会快速连续收到几条消息,然后长时间不活动.当actor没有收到250ms的消息时,我想执行代码.
只是为了澄清我的意思,在Javascript中,我可能会写一些像这样的代码:
function gotMessage() {
if(this.idleTimeout) {
clearTimeout(this.idleTimeout);
}
this.idleTimeout = setTimeout(function() {
//My code here
}, 250);
}
Run Code Online (Sandbox Code Playgroud)
我如何在Scala或Akka中实现这种效果,如果它已经存在于该库中的机制?
我正在尝试使用打字稿在节点中运行 Hello World express 应用程序,而绝对类型类型似乎被完全忽略了。
包.json:
{
"dependencies": {
"@types/express": "*",
"@types/node": "*",
"express": "*"
}
}
Run Code Online (Sandbox Code Playgroud)
tsconfig.json:
{
"compilerOptions": {
"module": "commonjs",
"lib": [
"es2015"
],
"target": "es6",
"noImplicitAny": true,
"strictNullChecks": true,
"noImplicitThis": true,
"noImplicitReturns": true,
"moduleResolution": "node",
"outDir": "dist",
"baseUrl": "."
},
"include": [
"src/**/*"
]
}
Run Code Online (Sandbox Code Playgroud)
源代码/应用程序.ts:
const express = require('express'); //express is typed "any" because @types/express is apparently ignored
const app = express();
const port = 3000;
app.get('/', (req, res) => res.send('Hello World!')); //Compile error here …Run Code Online (Sandbox Code Playgroud) javascript ×3
scala ×3
stack-trace ×2
akka ×1
andengine ×1
android ×1
angular ×1
curl ×1
express ×1
google-caja ×1
http-headers ×1
java ×1
node.js ×1
php ×1
specs2 ×1
typescript ×1