Tag: JavaScript

Greasemonkey 1.0中的jQuery与使用jQuery的网站冲突

自从新的Greasemonkey 1.0在几天前发布以来,每个有jQuery的站点和我在Greasemonkey脚本中使用jQuery的地方都不会正确运行我的脚本。 我在GS脚本中使用的jQuery(使用@require元数据)与页面的jQuery冲突。 这是由于新的@grant代码。 我已经阅读了文档,但仍不知道如何在沙盒中再次运行GS脚本; 唯一的选择似乎是授予对GS API的访问权限,或者将其授予none,并在没有任何安全限制的情况下运行该脚本,在设计我的几十个GS脚本运行时,这对我来说根本不起作用有安全限制,就像这样。

为什么全局变量被认为是不好的做法

我一直在看警告,不要在JavaScript中使用全局变量,但似乎人们说这个唯一原因是因为阻塞了全局名称空间。 我可以想象,通过把所有的变量放到一个大对象中,这个很容易被修复。 现在的问题是:除了方便之外,还有其他什么原因不使用全局变量吗? 他们是否有任何性能或兼容性问题?

有没有一个规范,元素的id应该是全局变量?

如果我在Chrome中有<div id='a'> ,那么在JavaScript中我可以做a. stuff() a. stuff() (就好像a是一个全局变量)。 然而,这不适用于FireFox – 我将需要使用document.getElementById('a') 。 这里的正确行为是什么? (根据W3规范) 此外,我感兴趣的是,如果我有一个ID a ID a div,但是在我的脚本中有一个叫做“太”的全局变量,Chrome将如何解决歧义。 行为是随机的,怪异的? 如何翻译由连字符(“ – ”),冒号(“:”)和句点(“。”)组成的元素(好吧,我知道他们可以用document.getElementById访问,但浏览器将如何翻译它进入代表它们的全局变量)

ES6是否为对象属性引入了明确定义的枚举顺序?

ES6是否为对象属性引入了明确定义的枚举顺序? var o = { '1': 1, 'a': 2, 'b': 3 } Object.keys(o); // ["1", "a", "b"] – is this ordering guaranteed by ES6? for(let k in o) { console.log(k); } // 1 2 3 – is this ordering guaranteed by ES6?

Chrome / Firefox console.log总是附加一行说明未定义的行

每次执行console.log ,都会在输出日志中附加一行说明undefined的行。 Firefox和Chrome在Windows和Linux上都会出现。

浏览器检测与功能检测

我会暂时扮演魔鬼的主张。 我一直在想,为什么浏览器检测(而不是功能检测)被认为是一个糟糕的做法。 如果我测试某个浏览器的某个版本,并确认,某些功能的行为是以某种可预测的方式,那么决定做特例似乎是可以的。 原因是将来会万无一失,因为这部分浏览器版本是不会改变的。 另一方面,如果我检测到DOM元素具有函数X,则不一定意味着: 这个功能在所有的浏览器中以相同的方式工作 更重要的是,即使在所有未来的浏览器中,它也将以相同的方式工作。 我只是窥探jQuery源代码,他们通过插入一个精心构造的HTML代码片段到DOM中进行特征检测,然后检查它是否具有某些特征。 这是一个明智而可靠的方法,但是我会说如果我在我的一小段个人JavaScript(没有jQuery)中做了这样的事情,那将会有点过重。 他们也具有实际无限的质量保证资源的优势。 另一方面,你经常看到人们做的是他们检查函数X的存在,然后在此基础上,他们认为函数将在所有具有这个函数的浏览器中以某种方式表现。 我没有说任何特征检测不是一件好事(如果使用正确),但我想知道为什么浏览器检测通常立即被驳回,即使这听起来合乎逻辑。 我不知道这是否是另一个时髦的事情。

调用chrome.tabs.query后,结果不可用

我正在创建(学习)Google Chrome的扩展程序。 为了调试一些代码,我插入了console.log() ,如下所示: var fourmTabs = new Array(); chrome.tabs.query({}, function (tabs) { for (var i = 0; i < tabs.length; i++) { fourmTabs[i] = tabs[i]; } }); for (var i = 0; i < fourmTabs.length; i++) { if (fourmTabs[i] != null) window.console.log(fourmTabs[i].url); else { window.console.log("??" + i); } } 这是非常简单的代码:获取所有标签信息到我自己的数组中,并打印一些东西。 为了检查代码是否正常工作,我运行代码。 问题来了: 当我使用断点(通过开发工具),代码运行良好。 没有断点,什么都不打印。 […]

JavaScript中多个数组的笛卡尔积

你将如何在JavaScript中实现多个数组的笛卡尔积? 举个例子, cartesian([1,2],[10,20],[100,200,300]) //should be // [[1,10,100],[1,10,200],[1,10,300],[2,10,100],[2,10,200]…]

通过Javascript确定图像文件大小+尺寸?

作为Web应用程序的一部分,一旦图像下载并呈现在网页上,我需要在浏览器上下文中确定图像的文件大小(kb)和分辨率(例如,我可以在页面上显示该信息这需要在客户端完成,显然必须能够在没有ActiveX控件或Java applet(IE7 +,FF3 +,Safari 3 +,IE6)的情况下解决X浏览器,尽管它不必每个浏览器都是相同的解决方案 理想情况下,这将使用系统的Javascript来完成,但如果我绝对需要一个JQuery或类似的库(或它的一小部分),可以做到这一点。

如何链接和分享先前的结果与承诺

我正在使用蓝鸟库,需要进行一系列的HTTP请求,并需要一些响应数据到下一个HTTP请求。 我已经构建了一个处理我的请求callhttp()的函数。 这需要一个URL和一个POST的正文。 我这样称呼它: var payload = '{"Username": "joe", "Password": "password"}'; var join = Promise.join; join( callhttp("172.16.28.200", payload), callhttp("172.16.28.200", payload), callhttp("172.16.28.200", payload), function (first, second, third) { console.log([first, second, third]); }); 第一个请求获取需要传递给第二个请求的API密钥等等。 如何从第一个请求获取响应数据? UPDATE 这是callhttp函数: var Promise = require("bluebird"); var Request = Promise.promisify(require('request')); function callhttp(host, body) { var options = { url: 'https://' + host […]