首页 > 解决方案 > 用户脚本:EventListener 不听(在显示远程 pdf 的选项卡上)

问题描述

我编写了一个代码来检索(和格式化)任何网页的 URL。

但它不适用于在 Edge (chromium) PDF 阅读器的选项卡中打开的远程 pdf。

所以我编写了下面的代码来选择 URL(通过按F4)并复制它(Ctrl+ C)。

但无论我点击哪里,用户脚本都不会捕获我用来调用命令的键盘事件( Alt+ )。B

我还尝试了document.onkeydown = function() { alert("key down") }which 适用于所有常规网站,但不适用于带有(远程)pdf 的选项卡。

如何解决这个问题?

// ==UserScript==
// @name     Get url of pdf open in browser
// @namespace
// @description
// @include     *
// @version     1
// @grant       GM_notification
// ==/UserScript==

window.addEventListener("keydown", dispatchkeyboard);

function dispatchkeyboard(key) {
    if (key.keyCode == 66 && key.altKey) { ///66 = b   https://keycode.info/
   alert(window.location.href)  // I get the alert on all regular website, but not when the tab is Edge pdf reader
        if (window.location.href.includes("chrome-extension")) {
  

    // send F4
            element.dispatchEvent(new KeyboardEvent("keydown", {
                key: "F4",
                code: "F4", 
                which: 115,

            }));
    // send Ctrl + C 
            element.dispatchEvent(new KeyboardEvent("keydown", {
                key: "c",
                keyCode: 67, 
                code: "Keyc", 
                which: 67,
                shiftKey: false, 
            }));




        }

    }
}

一个随机的 pdf链接,供想尝试的人使用

标签: javascriptuserscripts

解决方案


刚刚格式化并清理了你的代码......

window.addEventListener("keydown",
    (key)=>{
        if (key.keyCode == 66 && key.altKey) {
            alert(window.location.href);
            if (window.location.href.includes("chrome-extension")) {
                element.dispatchEvent(new KeyboardEvent("keydown", {key: "F4", code: "F4", which: 115}));
                element.dispatchEvent(new KeyboardEvent("keydown", { key: "c", keyCode: 67, code: "Keyc",which: 67,shiftKey: false}));
            }
        }
    }
);

通过提供的pdf 链接Chrome上。我明白了(这是由于通过 chrome pdf 内部扩展加载 pdf,如您所见window.location

在此处输入图像描述

如果我在Firefox中重用它,我会得到

在此处输入图像描述

如果我在Edge中重用它,我会得到

在此处输入图像描述

因此,经过进一步调查,您似乎应该强迫用户使用 firefox,因为 firefox 似乎是唯一支持您尝试做的事情的浏览器。


推荐阅读