小编Dag*_*bit的帖子

命令替换:反引号或美元符号/封闭?

在bash中执行命令替换的首选方法是什么?

我总是这样做:

echo "Hello, `whoami`."
Run Code Online (Sandbox Code Playgroud)

但最近,我经常看到它写得像这样:

echo "Hello, $(whoami)."
Run Code Online (Sandbox Code Playgroud)

什么是首选语法,为什么?或者他们几乎可以互换?

我倾向于赞成第一个,因为我的文本编辑器似乎知道它是什么,并且适当地进行语法高亮.

在这里读到,在每种情况下,转义字符的行为都有所不同,但我不清楚哪种行为更可取,或者它只取决于具体情况.

附带问题:在一个脚本中使用两个表单是不好的做法,例如嵌套命令替换时?

bash shell command substitution

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

通过CSS将元素显示为预格式化文本

有没有办法pre通过CSS 模拟元素的显示?

例如,我可以使用CSS规则在此div中保持空格完整吗?

<div class="preformatted">

  Please procure the following items:

    - Soup
    - Jam
    - Hyphens 
    - Cantaloupe
</div>
Run Code Online (Sandbox Code Playgroud)

html css whitespace pre

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

使用谷歌Vis的Graph Goat传送数据.API通过Chrome扩展程序

我刚检查了我的Chromium任务经理,发现我的Goats Teleported计数异常高.我认为创建一个浏览器扩展可能是一个好主意,该扩展通过Google Visualizations API运行山羊传送数据并生成一些不错的报告,因此我可以轻松跟踪它并确保它不会失控.

替代文字http://img820.imageshack.us/img820/4885/screenshottaskmanagerch.png

是否可以Goats Teleported通过chrome扩展API 以编程方式访问计数?您认为我应该如何格式化报告?我想的可能是饼图?

替代文字

javascript google-chrome google-visualization google-chrome-extension

61
推荐指数
1
解决办法
4166
查看次数

Django Javascript中的DRY URL

我在Appengine上使用Django.我reverse()到处都在使用django 功能,尽可能保持干燥.

但是,我在将这个应用到我的客户端javascript时遇到了麻烦.有一个JS类根据传入的ID加载一些数据.有没有一种标准的方法来对这些数据应该来自的URL进行硬编码?

var rq = new Request.HTML({
    'update':this.element,
}).get('/template/'+template_id+'/preview'); //The part that bothers me.
Run Code Online (Sandbox Code Playgroud)

javascript django ajax google-app-engine dry

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

如何安全地包装`console.log`?

假设我想console.log为某些合法的生产原因包含一些调用,比如像单元测试工具这样的东西.显然,如果浏览器没有console,或者如果没有控制台,我不希望这会抛出一个过早的异常.

创建一个简单的log函数来将内容记录到控制台的最佳方法是什么,或者如果没有控制台,则默默地失败而没有错误?

上面提到的问题的答案是:

var log = Function.prototype.bind.call(console.log, console);
log.apply(console, ["this", "is", "a", "test"]);
Run Code Online (Sandbox Code Playgroud)

可以log在IE上正常调用此函数,apply这里的使用只是为了表明它是可能的吗?并且,我从链接的问题中假设,如果IE的控制台在运行时关闭,这将失败,因此log即使在控制台打开后也无法工作,对吗?如果这是错的,有人可以解释它是如何工作的吗?

这篇ycombinator文章似乎很相关.他们是否正在谈论与上面链接的问题相同的IE行为?

Function.prototype.apply.apply(console.log, [console, arguments]);
Run Code Online (Sandbox Code Playgroud)

适用于IE9破解的console.log和其他供应商的常规console.log.与使用Array.prototype.slice将参数转换为实数组相同的hack.

这在我的chrome控制台中运行良好.

function echo(){
  Function.prototype.apply.apply(console.log, [console, arguments]);
}
Run Code Online (Sandbox Code Playgroud)

简化:

function echo(){
  Function.apply.call(console.log, console, arguments);
}
Run Code Online (Sandbox Code Playgroud)

添加支票并返回:

function echo(){
  return window.console && console.log &&
         Function.apply.call(console.log, console, arguments);
}
Run Code Online (Sandbox Code Playgroud)

上面的例子对我来说足够了.不过,我手头没有IE来测试它.这是安全包装的合理方法console.log吗?


更多问题

按照下面导航答案中的链接,我们看到代码:

Function.prototype.call.call(console.log, console,
    Array.prototype.slice.call(arguments));
Run Code Online (Sandbox Code Playgroud)

arguments在这种情况下转换为数组的目的是什么?我想如果你不这样做,它必须在某些浏览器中失败?并且,除了歌剧奇怪的行为和无控制台的浏览器之外,这样的东西不应该适用于其他所有浏览器吗?并且确实prototype在上面的例子中起到了作用,或者我们只是在迂腐... Function.call.call或者Object.call.call或者就此而言isNaN.call.call似乎也是如此Function.prototype.call.call …

javascript console logging internet-explorer wrapper

47
推荐指数
4
解决办法
2万
查看次数

window.name作为数据传输:一种有效的方法?

概述和原始问题

window.name是一个有趣的野兽.MDN的描述暗示了原始意图:

窗口名称主要用于设置超链接和表单的目标.Windows不需要名称.

所以,这意味着我们可以在这个窗口中打开控制台,并写道:

var win = window.open('http://google.com', 'el goog');
Run Code Online (Sandbox Code Playgroud)

...然后让它通过弹出窗口拦截器,它应该在一个名为"el goog"的窗口中打开google.com.由于同源策略,我无法访问name属性win,但如果我在新窗口中打开一个控制台并输入name,我就会得到"el goog".

如果我将窗口发送回我打开它的域(在这种情况下是stackoverflow.com),我可以获取name属性,但它没有改变.

win.location.replace(location.href);
win.name; // "el goog"
Run Code Online (Sandbox Code Playgroud)

这意味着我们可以通过设置name窗口的属性来拥有一种跨域会话存储.

如果google.com 在窗口被发送回原始域之前更改了值window.name,我们会看到新值而不是"el goog".这可以用作跨域数据传输,类似于JSONP或CORS的实用程序.

我做了一些搜索试图找到更多的信息,显然道场认为它是合法的运输.但不知何故,这并不能完全让我放心.所以我的问题是,任何信誉良好的网站都window.name用作数据传输吗?我认为它很容易被发现,因为他们的文档会对JSONP的查询字符串说" 添加回调",或者为window.name添加'what',但我从未见过这样的东西.有没有人在野外发现过这个?


替代问题

可能是没有人真正使用这种技术; 如果那是真的那么(正如Rob W指出的那样)上面的问题是无法回答的.所以,我的另一个问题是,这种方法有什么问题?这可能有助于解释为什么它没有被真正采用.

我认为,与JSONP相比,这种方法至少有两个好处.

  • 使用JSONP,您可以信任来自外地的脚本在您的域上运行.使用window.name,恶意站点包含的任何脚本都可以在自己的域上运行.

  • 使用JSONP,无法传递大数据(对于URL来说太大了),也无法进行HTTP POST.有了window.name,我们可以发布任意大小的任意数据.

有什么缺点?


示例实现

这是客户端实现的一个非常简单的示例.这不处理POST请求,只处理GET.

function fetchData(url, callback) {
    var frame = document.createElement('iframe');
    frame.onload = function() {
        frame.onload = function() { …
Run Code Online (Sandbox Code Playgroud)

javascript same-origin-policy

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

在画布中获取鼠标位置

有没有办法将位置鼠标放在<canvas>标签内?我想要相对于右上角的位置<canvas>,而不是整个页面.

javascript html5 canvas

43
推荐指数
6
解决办法
7万
查看次数

document.defaultView有什么意义?

有什么意义document.defaultView

MDN说:

在浏览器中返回与文档关联的窗口对象,如果没有,则返回null.

以下代码(来自PPK的网站)使用document.defaultView:

function getStyle(el,styleProp)
{
    var x = document.getElementById(el);
    if (x.currentStyle)
        var y = x.currentStyle[styleProp];
    else if (window.getComputedStyle)
        var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);
    return y;
}
Run Code Online (Sandbox Code Playgroud)

像这样的代码可以在其他地方找到,比如David Mark的My Library.我不确定人们是否只是从PPK或其他来源复制或独立提出,但我不明白.

我的问题是,document.defaultView在这种情况下使用的重点是什么?写这个不是更容易如下:

function getStyle(element, styleProp) {
    if (element === ''+element) element = document.getElementById(element);
    return element.currentStyle ? element.currentStyle[styleProp] :
           getComputedStyle(x,null).getPropertyValue(styleProp);
}
Run Code Online (Sandbox Code Playgroud)

document.defaultView.getComputedStyle做什么window.getComputedStyle或根本getComputedStyle不做什么?


cwolves的回答让我思考正确的方向.原来的功能是愚蠢的,错过了重点defaultView.我上面提出的建议不那么愚蠢,但也忽视了这一点defaultView.这是我的新提案:

function getStyle(element, styleProp) {
    var view = element.ownerDocument && …
Run Code Online (Sandbox Code Playgroud)

javascript dom

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

在严格模式下获取未知环境中的全局对象的引用

在未知主机环境中以ES5严格模式获取全局对象句柄的推荐方法是什么?

ECMAScript没有提供引用我所知道的全局对象的内置方法.如果是这样,这就是我正在寻找的答案.

已知环境中,全局对象通常具有自引用属性.由于全局对象是全局范围的VO,因此全局对象的属性是全局变量,因此我们可以使用它们从任何位置获取全局对象的句柄:

  • 在Web浏览器中,我们可以使用windowself.

  • 在node.js中,我们可以使用global.

但是,并非所有主机环境都是如此.据我所知,Windows Script Host不提供任何访问全局对象的方法.在WSH中获取全局对象的推荐方法似乎是this在不解析为对象的上下文中使用该关键字.例如:

var GLOBAL = (function(){return this}());
Run Code Online (Sandbox Code Playgroud)

此技术适用于任何主机环境,但不适用于严格模式,因为undefined this不会在严格模式下引用全局对象:

如果在严格模式代码中对此进行评估,则不会将此值强制转换为对象.此null或undefined值不会转换为全局对象,并且原始值不会转换为包装器对象.通过函数调用传递的此值(包括使用Function.prototype.apply和Function.prototype.call进行的调用)不会强制将此值传递给对象(10.4.3,11.1.1,15.3.4.3,15.3. 4.4).

正如所料,以下代码导致undefined:

(function(){
    "use strict";
    var GLOBAL = (function(){return this}());
    console.log(GLOBAL);
}());
Run Code Online (Sandbox Code Playgroud)

那么,无论严格模式如何,在任何环境中获取全局对象句柄的正确方法是什么?

顺便说一句,我目前的方法是嗅探引用全局对象的全局变量,如下所示:

var self, window, global = global || window || self;
Run Code Online (Sandbox Code Playgroud)

......然后才使用global.我认为这是一个糟糕的解决方案,原因有很多,其中大多数是相当明显的,并没有解决WSH问题.

javascript global ecma262 ecmascript-5 strict-mode

22
推荐指数
2
解决办法
6217
查看次数

日期构造函数:数字参数与字符串参数在某些情况下给出不同的日期

首先,我认为时区可能与此有关.我在EST/EDT.另外,我正在使用chrome 17/linux进行测试.

现在,假设我创建了两个这样的日期:

// December 5

dateFromNumbers = new Date(2020, 11, 5);
dateFromString = new Date("2020-12-5");
Run Code Online (Sandbox Code Playgroud)

看来这些日期应该具有相同的时间戳,它们会:

+dateFromNumbers == +dateFromString; // true
Run Code Online (Sandbox Code Playgroud)

......至少在这种情况下.但在某些情况下,它们不会:

// December 15

dateFromNumbers = new Date(2020, 11, 15);
dateFromString = new Date("2020-12-15");

+dateFromNumbers == +dateFromString; // false
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

dateFromNumbers; // Tue Dec 15 2020 00:00:00 GMT-0500 (EST)
dateFromString;  // Mon Dec 14 2020 19:00:00 GMT-0500 (EST)
Run Code Online (Sandbox Code Playgroud)

看起来dateFromStringdateFromNumbers在这种情况下提前5小时(EST是格林尼治标准时间 - 5,我确定它与某种方式相关).

这似乎影响了10月到12月的月末.这是一个小提琴,可以很容易地看出哪些日子不同(除非你是红绿色盲,在这种情况下可能很难看到,我的道歉).

http://jsfiddle.net/9gBfX/

是什么赋予了?


笔记:

  • 您可以将系统时区设置为EST/EDT,以便在我看到它时查看jsfiddle示例.
  • 日期的月份数量从零开始; 这11不是一个错字.
  • 这个问题出现在我检查过的每一年.

javascript constructor date

18
推荐指数
1
解决办法
6816
查看次数