我正在开发一个chrome扩展程序,该扩展程序涉及获取当前选项卡的选定文本。这是我使用的html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script>
chrome.tabs.executeScript( {
code: "window.getSelection().toString();"
}, function(selection) {
document.getElementById("output").value = selection[0];
});
</script>
</head>
<body>
<div id="output"></div>
</body>
</html>
它不起作用,为什么?接下来是来自Chrome App&Extension Developer Tool的错误消息,其中一些错误消息用省略号剪掉,对不起,我还没有弄清楚如何在此处查看完整的错误消息,查看详细信息仅给了我堆栈跟踪信息,而不是完整的错误消息。
您最初的方法是正确的(并且很可能是从这个问题中得出的)。
它有两个问题:
不允许使用内联脚本(<script>...</script>
);通过将代码放在单独的文件(例如)中进行修复。popup.js
您需要访问页面才能进行内容脚本注入的权限。在您的特定情况下,有一个特定的权限,"activeTab"
它以透明且轻松的方式进行,没有安全警告。调用扩展程序时(通过单击按钮),可以访问当前选项卡。
修复了这些问题之后,您的“直接”方法就会奏效。
顺便说一下,要在将来调试此类问题,您需要检查弹出页面。
至于您自己的答案,您会使事情变得非常复杂。
在这种情况下,您不需要事件页面;您的弹出窗口可以呼叫executeScript
和收听消息。在某些情况下确实需要它,特别是当内容脚本发送消息时不能保证弹出窗口打开时;但是在这里您可以保证。
假设您需要事件页面,请考虑不使用getBackgroundPage
其中的方法-它紧密地耦合了代码;您可以改为发送一条消息。sendResponse
可用于将结果传递回,即使是异步传递。
最后,您的架构相对于会造成混淆content.js
。它只有一个副本在附加到目标页面的特殊上下文中执行(而不是在扩展上下文中)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句