【发布时间】:2020-05-27 06:25:05
【问题描述】:
如果您使用 Chrome 并转到此页面:https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf 我想知道您是否可以在该页面上运行您的 Chrome 扩展程序。
我可以使用 content_script 或 background.js。
当我 console.log 记录鼠标移动或通常注入 content_script 时,什么都没有显示。
我注意到这篇帖子 Run a Chrome Plugin On a PDF Page 但很遗憾,它对我不起作用。
这是我的manifest.json:
{
"name": "Extension",
"description": "Fancy stuff",
"version": "1.0.0",
"manifest_version": 2,
"permissions": [
"https://*/*",
"http://*/*",
"tabs",
"webRequest",
"webRequestBlocking",
"webNavigation",
"management",
"sessions",
"<all_urls>",
"activeTab"
],
"background": {
"scripts": ["background.js"],
"persistent": true
},
"content_scripts": [
{
"matches": ["http://*/*", "https://*/*" ],
"js": ["content_script.js"],
"match_about_blank": true, // Needed for docs.google.com. Dunno why!
"all_frames": true,
"run_at": "document_start"
},
{
"matches": ["http://*/*", "https://*/*"],
"js": ["document_idle.js"],
"match_about_blank": true, // Needed for docs.google.com. Dunno why!
"all_frames": true,
"run_at": "document_idle"
}
]
}
现在,我在content_script.js 中有一个console.log('hi'),但是当我打开检查器时我看不到它的输出,这让我相信它永远不会运行。
【问题讨论】:
-
假设您使用的是内置 PDF 查看器,而不是第三方扩展程序,当然可以在 Chrome 中在 pdf 文件上运行内容脚本,因此您的代码肯定有问题。但是请注意,PDF 的实际内容显示在运行内部插件的
<embed>元素中,因此它自然不会在主文档中冒泡鼠标事件。为此,您必须在整个页面上使用透明 div,但这会破坏查看器的功能。 -
现在,我在
content_script.js中有一个console.log('hi'),但是当我打开检查器时我看不到它的输出,这让我相信它永远不会运行。 -
在你的情况下一定有别的东西在起作用。例如,正如我已经建议的那样,您可能正在使用自定义查看器。可能还有其他原因,但我不喜欢猜测:正确的方法是调试,即尝试在没有扩展的新配置文件中,尝试从扩展中删除所有其他部分,尝试旧/新版本的浏览器,等等.此外,控制台输出可能会被页面或扩展程序清除,因此不要依赖它。使用 devtools 检查您的内容脚本代码并设置断点。
-
我在 Chrome Extension dev rel 中与某人交谈,他们说这是不可能的。我引用:“至于你的 PDF 问题,不,你不能注入它,因为查看器本身就是一个扩展。你也许可以用 Chrome DevTools 协议做一些事情,但在那一点上你还差得很远杂草和 YMMV。”
-
他们根本不明白你在问什么,正如我多年来观察到的那样,他们并不擅长理解正常人。他们认为您想注入实际的插件,这是不可能的。打开 pdf 的选项卡本身是完全可注入的。