小编fro*_*dev的帖子

mouseover有时会触发而不是touchstart - 为什么?

我发现了一个非常奇怪的行为,我无法解释.想要做以下事情:

处理程序需要对一个touchstart 一个mouseover事件作出反应,具体取决于输入设备的类型.请注意,我想支持混合设备(鼠标和触摸屏),我不能依赖指针事件.

现在,我只是设置了两个touchstartmouseover事件.在大多数情况下,它的工作正常.还用于preventDefault禁止触摸事件后触发的模拟"鼠标"事件.但是对我来说完全令人困惑的是,有时会mouseover发生一个事件,如果我删除了preventDefault,它甚至可能mouseover会触发而不是 a touchstart.为什么哦为什么会这样?

此外,Android和iOS都可以重现!虽然它似乎更容易用Android触发(使用Chrome).

我准备了一个小测试盒,所以你可以尝试自己.请注意,只有在红色DIV(具有事件)和背景之间的边界上的某个位置点击时,才会触发此行为.只需点击中心即可100%工作.在发生这种情况之前,您可能需要或多或少的尝试.

任何帮助非常感谢!

<!DOCTYPE html>
<html>

<head>
  <title>Touchtest</title>
  <style>
    body {
      background: #222;
      color: white;
      position: relative;
      font-size: .9em;
      font-family: Arial, Helvetica, sans-serif;
    }
    #test {
      position: fixed;
      top: 100px;
      right: 100px;
      bottom: 100px;
      left: 100px;
      background: red;
    }
  </style>
</head>

<body>
  <div id="test"></div>
  <script type="text/javascript">
    function testEvent(event) {
      console.log("testEvent", event);
      if (event.type === "mouseover") {
        alert("MOUSEOVER …
Run Code Online (Sandbox Code Playgroud)

javascript events touch

12
推荐指数
1
解决办法
1155
查看次数

grunt:可以为插件重新定位"node_modules"吗?

如果我安装了任何grunt插件,则默认情况下会将其添加到项目目录根目录中名为"node_modules"的文件夹中.

我的问题:是否可以将整个文件夹(以及所有插件)移动到另一个位置(但仍然在我的项目文件夹中),让我们说"build/node_modules"?

当然,我仍然希望能够在此更改后从项目层次结构中的任何位置运行grunt.

gruntjs

10
推荐指数
1
解决办法
5622
查看次数

当我不使用Promise的"then"功能时,是否存在任何(负面)副作用?

我有一个返回Promise的函数.

现在,有时消费者在Promise上使用"then"函数是有意义的.但有时消费者根本不关心Promise什么时候解决,也不关心结果 - 换句话说,同样的功能也应该能够以"一劳永逸"的方式被调用.

所以我想要这两种使用场景:

func().then( ... ); // process Promise
func(); // "fire and forget"
Run Code Online (Sandbox Code Playgroud)

这显然有效,但我想知道这是否被认为是"不良做法",特别是如果这种使用模式可能有任何不必要的副作用,即.导致内存泄漏?现在我正在使用蓝鸟,但我认为如果有任何不同,可以切换到原生Promise.

javascript promise

7
推荐指数
1
解决办法
453
查看次数

允许多种数据类型的Javascript参数:良好实践与否?

很多次我看到 - 特别是在jQuery中 - 一个函数可以有多个有效的数据类型,比方说一个字符串或一个函数.此外,在我自己的代码中,我有时会有一些函数可以采用一个多个值.所以我可以调用函数:

myFunc("arg"); or myFunc(["arg1", "arg2", ...]);
Run Code Online (Sandbox Code Playgroud)

这似乎更灵活,也更方便打字,但这实际上是一件好事吗?

因为另一方面,没有明确说明函数的类型,而AFAIK则JIT编译器无法有效地工作.并且通常必须存在某种类型的类型强制,这可能会引入额外的性能损失.

那么,总是写一下会更好myFunc(["arg"])吗:即使数组中只有一个对象?你对此有何看法?

javascript jquery types arguments function

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

这些 javascript 方法可以被认为是 XSS 安全的吗?

我正在实现一个所谓的“单页应用程序”,它接受 JSON 作为输入。这也意味着所有 HTML 都在浏览器中呈现,而且所有模板(我使用淘汰赛)似乎都不受用户输入的影响,因为模板不是由后端动态构建的,而是静态嵌入在客户端中的。换句话说,我不做这样的事情:

echo '<input type="text" value="$var">'
Run Code Online (Sandbox Code Playgroud)

所以所有用户内容的渲染本质上都归结为这些 JS 方法:

document.createTextNode(userVar); // for displaying static text
inputElement.value = userVar; // for populating input fields
document.title = userVar; // some user input can be reflected in the doc title
window.history.pushState = ... // no user input is set here directly, but there are URIs where this could be set using an outside link
Run Code Online (Sandbox Code Playgroud)

所以现在的问题是:这些方法都是100% XSS 安全的吗?或者还有什么方法可以触发 XSS 攻击——如果“是”,那怎么做?

html javascript xss single-page-application

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