小编Mat*_*ert的帖子

如何在Immutable.js中设置深层嵌套的值?

使用纯JavaScript对象时,可以轻松更改深层嵌套的对象属性:

people.Thomas.nickname = "Mr. T";
Run Code Online (Sandbox Code Playgroud)

但是对于Immutable,我必须在拥有一个新的人物对象之前浏览每个属性的祖先:

var thomas = peopleImmutable.get("Thomas");
var newThomas = thomas.set("nickname", "Mr .T");
peopleImmutable = peopleImmutable.set("Thomas", newThomas);
Run Code Online (Sandbox Code Playgroud)

是否有更优雅的方式来写这个?

javascript immutable.js

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

我可以阻止Babel遍历插件插入的代码吗?

我正在构建一个插件,enterFunction()通过调用插入每个现有函数调用的前面path.insertBefore.所以我的代码转换自:

myFunction();
Run Code Online (Sandbox Code Playgroud)

至:

enterFunction();
myFunction();
Run Code Online (Sandbox Code Playgroud)

问题是,当我插入节点时,Babel再次遍历插入的节点.这是日志输出:

'CallExpression','myFunction''CallExpression
','enterFunction'

如何防止Babel进入enterFunction呼叫表达及其子代?

这是我目前用于Babel插件的代码:

function(babel) {
    return {
        visitor: {
            CallExpression: function(path) {
                console.log("CallExpression", path.node.callee.name)
                if (path.node.ignore) {
                    return;
                }
                path.node.ignore = true

                var enterCall = babel.types.callExpression(
                    babel.types.identifier("enterFunction"), []
                )
                enterCall.ignore = true;
                path.insertBefore(enterCall)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

babeljs

19
推荐指数
1
解决办法
564
查看次数

在Chrome中加载页面时,如何捕获所有网络请求和完整响应数据?

使用Puppeteer,我想在Chrome中加载一个网址并捕获以下信息:

  • 请求网址
  • 请求标头
  • 请求发布数据
  • 响应头文本(包括重复的头文件set-cookie)
  • 转移响应大小(即压缩大小)
  • 完整的反应机构

捕获完整的响应体是导致我的问题的原因.

我试过的事情:

  • 获取响应内容response.buffer- 如果在任何时候有重定向,这不起作用,因为缓冲区在导航上被擦除
  • 拦截请求和使用getResponseBodyForInterception- 这意味着我无法再访问encodedLength,在某些情况下我也遇到了获取正确请求和响应头的问题
  • 使用本地代理可以正常工作,但这会显着减慢页面加载时间(并且还会更改某些行为,例如证书错误)

理想情况下,解决方案应该只有较小的性能影响,并且与正常加载页面没有任何功能差异.我也想避免分叉Chrome.

javascript google-chrome puppeteer

19
推荐指数
3
解决办法
5626
查看次数

如何使用Proxy对象控制属性枚举(for ... in)?

我将一个对象包装在一个代理中,然后迭代它.如何控制它迭代的键?

如果我不覆盖键,代理可以工作:

var obj = {"hello": "world"}
var proxy = new Proxy(obj, {})
for (var key in proxy){
    console.log(key)
}
// logs "Hello"
Run Code Online (Sandbox Code Playgroud)

但是,如果我更改ownKeys处理程序中的键,则不记录任何内容.

var obj = {"hello": "world"}
var proxy = new Proxy(obj, {
    ownKeys: function(){
        return ["a", "b"]
    }
})
for (var key in proxy){
    console.log(key)
}
// Logs nothing
Run Code Online (Sandbox Code Playgroud)

如果我返回"hello"作为ownKeys唯一"hello"记录的一部分.

显然enumerateES6中有陷阱,但它已从ES7中删除.

是否仍然可以for...in使用代理控制循环?为什么enumerate从规范中删除了?

javascript proxy-object

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

Webapp2会话在请求之间丢失

我正在使用webapp2_extras来设置会话变量.如果我在设置后打印变量,则值是正确的.还会进行save_sessions调用.但是,当我再次发出请求时,未设置变量.

大多数代码都来自webapp2文档:

import webapp2
from webapp2_extras import sessions

class BaseHandler(webapp2.RequestHandler):
    def dispatch(self):
        self.session_store = sessions.get_store(request=self.request)
        try:
            webapp2.RequestHandler.dispatch(self)
        finally:
            self.session_store.save_sessions(self.response)
    @webapp2.cached_property
    def session(self):
        return self.session_store.get_session()

class MainHandler(BaseHandler):
    def get(self):
        foo = self.session.get('foo')
        print foo
        self.session['foo'] = 'bar'
        foo = self.session.get('foo')
        print foo
        self.response.write(BaseHandler)

config = {}
config["webapp2_extras.sessions"] = {
    "secret_key": "key",
}

app = webapp2.WSGIApplication([
    ('/', MainHandler)
], debug=True, config=config)
Run Code Online (Sandbox Code Playgroud)

这总是返回"None something"但我希望它为第二个请求返回"something something".

python session google-app-engine webapp2

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

如何在turn.js中禁用剥离(悬停效果)?

我不想在turn.js中使用悬停动画.试过这个:

$('#flipbook').turn({
    width: 400,
    height: 300,
});

$('#flipbook').turn('peel', false);?
Run Code Online (Sandbox Code Playgroud)

任何形式的帮助将不胜感激.

javascript turnjs

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

如何从Chrome扩展程序后台脚本访问页面变量

使用内容脚本,您可以将脚本标记注入DOM,以便访问原始页面中的变量(如本问题中所述).

我想避免将代码注入每个页面,而只是在用户单击扩展图标时执行此操作.

当我尝试使用与内容脚本相同的代码时,值未定义,尽管脚本已正确插入.

这可能吗?否则使用内容脚本并与其通信首选解决方案?

这是我正在使用的代码:

var scr = document.createElement("script");
scr.type="text/javascript";
scr.innerHTML = "setInterval('console.log(window.testVar)', 1000)"
document.body.appendChild(scr)
Run Code Online (Sandbox Code Playgroud)

清单摘录:

 "permissions": [
    "tabs",
    "http://*/*", "https://*/*"
  ],
  "background": {
    "scripts": ["inject.js"]
  },
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome-extension content-script

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

无法在chrome开发人员工具中保存到临时变量

在chrome developer工具中,我们可以使用"store as global variable"将对象值保存到变量中.但我得到的错误如下."无法保存到临时变量."

chrome开发工具

global-variables google-chrome-devtools

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

ng-grid中的外部过滤器

我有3个搜索字段,应该过滤我的表(名称,目标,范围).
前两个创建常规过滤器,意味着更改其中一个"filterText"属性在此结构中更改:

name: [NAME_VALUE]; target: [TARGET_VALUE];
Run Code Online (Sandbox Code Playgroud)

问题出在最后一个问题上.我希望它按低于或等于过滤.

像这样的东西:

name: [NAME_VALUE]; target: [TARGET_VALUE]; reach: >[REACH_VALUE]
Run Code Online (Sandbox Code Playgroud)

所以我想出我应该创建自定义过滤功能并将"useExternalFilter"设置为true.

我已经为此搜索了2天并且没有找到完整的答案:如何获取对行的引用以过滤它们?当我得到这个参考时,如何使用ng-grid方式隐藏行?

这就是我到目前为止所做的:我在ng-grid的源代码中看到,他们在"filterText"的更改时发出"ngGridEventFilter"事件,所以我用它来听取它:

$scope.$on( "ngGridEventFilter", function(){
    $scope.checkReach( );
});
Run Code Online (Sandbox Code Playgroud)

angularjs ng-grid

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

使用动态导入时获取 Webpack 块 url 作为字符串

使用 Webpack,我可以加载这样的模块:

import(moduleName).then(_ => {})
Run Code Online (Sandbox Code Playgroud)

但是我只想获取块的 URL,而不是实际加载它。那可能吗?

javascript webpack

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