我有来自Facebook API的JSON响应,如下所示:
{
"data": [
{
"name": "Barack Obama",
"category": "Politician",
"id": "6815841748"
},
{
"name": "Barack Obama's Dead Fly",
"category": "Public figure",
"id": "92943557739"
}]
}
Run Code Online (Sandbox Code Playgroud)
我想将JSONPath应用于它,只返回类别为"Politician"的结果.从我读过的内容看来,我需要这样做:
$.data[?(@.category=='Politician')]
Run Code Online (Sandbox Code Playgroud)
但根据我发现的测试工具,这不起作用.我发现了另一个问题,表明我应该使用"eq"而不是"==",但这也不起作用.我在这里弄错了什么?
我在查看node.js模块文档,并注意到每个模块都有一个属性 - module.parent.我试图使用它,但是被模块缓存烧毁了 - module.parent只有在首先需要()它的模块看来,无论当前的上下文如何.
那么它的用途是什么?有没有其他方法可以获得对当前 require()模块的引用?现在我将模块包装在一个函数中,因此它被调用为:
require("mylibrary")(module)
Run Code Online (Sandbox Code Playgroud)
但这似乎不是最佳的.
我成功地设置了WebPack - 它正在编译我的babel和SCSS文件就好了,我让手表功能正常工作.但是我也想使用热模块更换 - 而且我遇到了困难.当我在浏览器中加载开发服务器时,它会显示Cannot resolve module 'webpack/hot/dev-server'.我的配置如下所示:
import webpack from 'webpack';
import wpServer from 'webpack-dev-server';
var compiler = webpack({
entry: [
'./src/core.js',
'webpack/hot/dev-server'
],
output: {
path: outPath,
filename: '[name].js'
},
resolveLoader: { root: path.join(MODULE_PATH, "node_modules") },
module: {
loaders: [
{ test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader' },
{ test: /\.scss$/, loader: "style!css!sass" }
]
},
plugins: [new webpack.HotModuleReplacementPlugin()],
watch: true
});
var server = new wpServer(compiler, {
contentBase: outPath,
hot: true,
quiet: false,
noInfo: false, …Run Code Online (Sandbox Code Playgroud) 我一直在尝试在UINavigationController中堆叠WKWebViews,作为制作比PhoneGap更原生的混合应用程序的方法.它广泛使用 - 当WKWebView访问链接时我挂钩到decisionPolicyForNavigationAction,并推送一个新的ViewController及其想要的链接.
但页面加载速度很慢.我已经做了我能想到的所有事情来加速它 - 它使用loadHTMLString而不是确保一切都是本地的请求 - 我甚至尝试剥离CSS和JS,看看是否加快了速度,但没有骰子.对于一个简短的,仅限HTML,本地存储的页面,它仍然需要至少500毫秒才能显示在空的WKWebView中.我可以从调试中看出延迟不是从磁盘读取HTML,而是在loadHTMLString()和didFinishNavigation()之间的时间.
有没有人有任何解决这个问题的策略?我试着预加载视图,只是我不知道用户要点击哪个链接所以我不知道要预加载什么.
当浏览器下载代码时,我理解缩小等背后的基本原理,但在我的PhoneGap应用程序中,它将在本地运行.如果所有资源都是本地的,那么这样做有什么意义吗?
我想设置一个JS函数运行,但不要等待响应.我能想到的唯一方法是:
setTimeout(function() {
myFunc();
},0);
Run Code Online (Sandbox Code Playgroud)
但这似乎......效率最低.有任何想法吗?
如果我有一个数组:
['one.html','two.html','three.html']
Run Code Online (Sandbox Code Playgroud)
我怎么能爆炸那个数组,对它应用一连串的承诺,然后再把它重新组合起来?目前我的代码是这样的:
Promise.map(['one','two','three'], function(i) {
dbQuery('SELECT ' + i);
}).then(function(results) {
// This has an array of DB query results
});
Run Code Online (Sandbox Code Playgroud)
我想象的是:
Promise.map(['one','two','three'], function(i) {
dbQuery('SELECT ' + i);
})
.explode()
.then(function(result) {
// Individual result
})
.combine()
.then(function(results) {
// Now they're back as an array
});
Run Code Online (Sandbox Code Playgroud)
现在,我知道Bluebird没有这些功能,所以我想知道正确的Promise-y方式是做什么的?
我正在尝试实现UNNotificationServiceExtension,但我的代码似乎经常失败,只是说明了
Program ended with exit code: 0"
Run Code Online (Sandbox Code Playgroud)
我试图在扩展中使用FMDB Sqlite3模块,似乎我可能会遇到扩展内的内存限制.这些扩展中是否有任何记录的内存限制?是否有任何策略可以帮助我将它们考虑在内,或者我只是要接受我不能将复杂的功能放入扩展中?
通过Instruments运行它表明它只达到3.24MB.NSExtensionMain占68%,所以我认为我不能把它降低很多.
我正在使用Modernizr来检测用户正在运行的浏览器支持的功能,到目前为止一切顺利.但在测试base64兼容性时,我遇到了理论上的问题.这个支持的补丁在这里详细介绍,并且可以工作 - 除了IE8的奇怪情况 - 它只允许最高32KB的base64编码图像.
我真的不想在我的JS文件中嵌入一个32KB长的base64字符串,它会增加一些疯狂的膨胀.那么,我可以使用JS创建一个32KB的有效图像吗?我正在考虑在字符串中重复某种模式,直到它达到32KB的长度,这种事情.或者可能使用现有的小字符串(如Modernizr补丁中的字符串)并在最后添加垃圾数据,这仍然会产生有效的图像.
除了如何操作现有图像之外,我对base64编码几乎一无所知.有没有人有任何想法?
我已经成功设置了一个WKWebView ScriptMessageHandler来接收来自Webview内部的消息。然后,我evaluateJavaScript用于将响应发送回Webview。当所有操作都在视图的主框架上执行时,这可以很好地工作。
但是,当我尝试在iFrame中执行此操作时,我遇到了困难。我仍然在消息处理程序中接收到该消息(完整WKFrameInfo地告诉我消息的来源),但是我找不到任何evalateJavaScript针对该框架运行的方法。我可以window.frames在评估的JavaScript中使用hack,但是如果iFrame与父框架的来源不同,那么我将遇到跨域错误。
有什么方法可以识别WKWebview中的框架并评估JS?