【问题标题】:CTRL+C to copy URL on mouse hoverCTRL+C 在鼠标悬停时复制 URL
【发布时间】:2020-07-13 01:00:39
【问题描述】:

我想将鼠标悬停在 URL 上并使用 CTRL+Alt+C 复制 URL。这个主题几乎描述了我正在尝试做的 99%: https://www.autohotkey.com/board/topic/111762-mouse-hover-copy-link/?p=662644

我已经使用了用户脚本并稍微修改了它,以便它在“href”部分之后给我 URL。顺便说一句,我一点也不精通 Javascript,我只是玩过它,很幸运能让它工作。这是我所拥有的:

这很好用,但是每次我将鼠标悬停在链接上时都会复制 URL。我不想要这个,因为它只是在我的剪贴板中添加了一堆 URL。

在那篇文章的底部,有一个 Autohotkey 组件。它获取标签标题,而不是 URL。

如何修改用户脚本和 Autohotkey 来做我想做的事?

作为第二个问题 - 我想使用上面的 Javascript 作为参考创建一个额外的用户脚本。这个新的用户脚本将采用我的鼠标悬停的 URL,将其更改为前缀为 word:ofe|u|并在按住 Alt 键的同时单击链接时将其粘贴到 URL 栏中。所以基本上:

  1. 将鼠标悬停在我感兴趣的 URL 上(例如 https www.google.com)
  2. Userscript 将修改 URL 并将其更改为 word:ofe|u|https://www.google.com
  3. 按住 Alt + 左键单击 URL
  4. word:ofe|u|https://www.google.com - 页面已加载,或 URL 已粘贴到 URL 栏中

更新:

我已经成功了,不知道我是怎么做到的,但我只是玩弄了我在 Google 上找到的代码。同样,我对 Javascript 一无所知。

https://pastebin.com/S9znPxBU

// ...

这很好用,但是如果您单按 CTRL+C,只要您将鼠标悬停在链接上,它就会一直将 URL 复制到剪贴板。我希望它只在每次按 CTRL+C 时才开始将 URL 复制到剪贴板。

【问题讨论】:

    标签: javascript autohotkey userscripts


    【解决方案1】:

    AutoHotkey 在这里没有多大帮助,因为它不能直接访问 URL。幸运的是,您可以使用新的JavaScript Clipboard API。它仅适用于安全上下文(AKA HTTPS)并且页面需要成为焦点。最好使用浏览器扩展来执行此操作,因为它可以解决这些限制。

    试一试,但先点击预览窗口中的空白区域将其聚焦。

    // Userscript
    "use strict";
    window.addEventListener("load", () => {
      const evOpts = {capture: true, passive: true};
      let hoveredLink = null;
    
      for (let link of document.getElementsByTagName("a")) {
        link.addEventListener("mouseenter", () => {
          hoveredLink = link;
        }, evOpts);
        link.addEventListener("mouseleave", () => {
          hoveredLink = null;
        }, evOpts);
      }
    
      window.addEventListener("keydown", (ev) => {
        if (hoveredLink && ev.ctrlKey && ev.altKey && ev.code === "KeyC") // Ctrl+Alt+C
          // Copy *absolute* URL to the clipboard
          navigator.clipboard.writeText(new URL(hoveredLink.href, location.href)).then(()=>{
            console.log("URL copied to clipboard!");
          }, (err)=>{
            console.error("Error copying URL to clipboard: ", err);
          });
      }, evOpts);
    });
    <a href="//google.com">Google</a> <a href="https://youtube.com/">Youtube</a>

    【讨论】:

    • 谢谢!有效!虽然,在某些网站(如 Sharepoint Online)上,它在控制台中显示以下“跨源请求被阻止:同源策略不允许读取位于 browser.pipe.aria.microsoft.com/Collector/3.0/?qsp=t...22e-e89cc89eb64d-7688&client-time-epoch-millis= 的远程资源1585854891325.(原因:CORS 请求未成功)。”
    • 是的,使用 CORS 的网站不喜欢加载不熟悉的脚本。
    • 嗯,好的,有办法解决吗?
    • 现在想多了,你在控制台看到的错误不是脚本引起的。我将 CORS 与 CSP 混淆了……该脚本可能失败了,因为 Sharepoint 没有使用标准的 <a> 元素作为超链接,或者因为它阻止了事件的传播。我将编辑答案,使事件侦听器处于“捕获”模式。这可能会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 2011-08-04
    • 2018-09-03
    相关资源
    最近更新 更多