javascript - 用户脚本: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链接,供想尝试的人使用
解决方案
刚刚格式化并清理了你的代码......
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 似乎是唯一支持您尝试做的事情的浏览器。
推荐阅读
- java - Final 类和 Final 方法 - 使用 Mockito 2 进行模拟
- r - 给出数据框中对象的名称
- javafx - 在 javafx-maven-plugin 中使用 javafx:jlink 时如何配置“--enable-preview”
- java - 如何在 Java 中创建一个 Rectangle 类?
- android - Kotlin android Smart cast to 'BottomSheetBehavior 应用程序崩溃
- square - 在 Square 中,当我们将订单标记为就绪时,有什么方法可以让 Square 通过电子邮件或文本通知该用户?
- angular - VS Code 转到工作区中的符号 - 排除外部文件
- php - 如何使用 podio-php 在 Podio 中创建项目?
- r - 如何在直方图上为不包含数据的 bin 创建插槽
- d3.js - 在 d3.js 中显示带有拉丝值的文本