当在纯html文件中使用时,这段代码(由this page提供)可以很好地完成其工作.特别是,它成功地将选定的文本复制到剪贴板.

function copySelectionText(){
  var copysuccess
  try {
    copysuccess = document.execCommand("copy")
  } catch(e) {
    console.log(e)
    copysuccess = false
  }
  return copysuccess
}
document.addEventListener('mouseup', function(){
  var copysuccess = copySelectionText()
}, false)

然而,当我在以下代码中的一个篡改猴子定制脚本中使用它时,我无法使其工作:

(function() {
    // 'use strict';
    // Your code here...

})();

免责声明:

  • 这是我第一次写篡改猴子的 playbook .
  • 我打算在我的一个朋友拥有的特定网站上使用这一点,而不是在任何其他网站上滥用.
  • 使用普通的javascript(没有库)将是一个主要的优势.

问:我如何让这个函数在篡改猴子的定制脚本中工作?

我遵循了篡改猴子/greasemonkey文档中的说明.

控制台显示"未定义复制成功".console.log(e)也不会产生任何结果.

推荐答案

我相信你可能没有通过严格的判断.由于您使用的是'use strict',因此您的JavaScript需要兼容.有关严格模式的更多信息,请参阅:MDN: Strict mode.

此外,除了存储copy命令的成功之外,您没有做任何事情.您既没有记录,也没有发出任何alert .此外,要获取实际的剪贴板文本,您需要访问剪贴板对象.

下面的脚本在ViolentMoney中工作.它使用新的异步剪贴板API.

// ==UserScript==
// @name         Copy Selected Text
// @namespace    Stack Overflow
// @match        https://stackoverflow.com/questions/75939654/*
// @grant        none
// @version      1.0.0
// @author       Mr. Polywhirl
// @description  Userscript for copying text on a website.
// ==/UserScript==
(function() {
  // 'use strict';
  function copySelectionText() {
    let copysuccess;
    try {
      copysuccess = document.execCommand("copy");
    } catch(e) {
      console.log(e);
      copysuccess = false;
    }
    return copysuccess;
  }

  async function onMouseUp() {
    const copysuccess = copySelectionText();
    if (copysuccess) {
      // See: https://stackoverflow.com/a/49886460/1762224
      const clipboardText = await navigator.clipboard.readText();
      alert(clipboardText);
    }
  }

  document.addEventListener('mouseup', onMouseUp, false);
})();

Javascript相关问答推荐

React中的表格中 Select Radio按钮

将音频记录从js发送到activx-web服务器以保存到磁盘

使用Astro和React的动态API

Python类实现的JavaScript吊坠是什么样子的?

更新Reduxstore 中的状态变量,导致整个应用程序出现不必要的重新渲染

Mongodb拥有5亿个文档,我想根据JavaScript驱动程序中的两个字段使用regEx进行搜索,而不是模式

如何才能拥有在jQuery终端中执行命令的链接?

Google Apps脚本中的discord邀请API响应的日期解析问题

从mat—country—select获取整个Country数组

当点击注册页面上的注册按钮时,邮箱重复

手机上的渲染错误文本必须在文本组件中渲染,但在浏览器上没有问题<><>

引用在HTMLAttributes<;HTMLDivElement>;中不可用

我创建了一个创建对象的函数,我希望从该函数创建的对象具有唯一的键.我怎么能做到这一点?

React.Development.js和未捕获的ReferenceError:未定义useState

一个实体一刀VS每个实体多刀S

无法避免UV:flat的插值:非法使用保留字"

如何在Java脚本中对列表中的特定元素进行排序?

在SuperBase JS客户端中寻址JSON数据

用另一个带有类名的div包装元素

按特定顺序将4个数组组合在一起,按ID分组