Sea*_*ene 3 javascript google-chrome google-chrome-extension
我正在开发一个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>
Run Code Online (Sandbox Code Playgroud)
它不起作用,为什么?以下是来自Chrome App和Extension Developer Tool的错误消息,其中一些错误消息是用省略号剪切的,抱歉我还没弄清楚如何在这里查看完整的错误消息,查看详细信息只给出了堆栈跟踪,而不是完整的错误消息.
Sea*_*ene 10
正如@Xan建议的那样,之前提到的方法(你可以在这里找到它)过于复杂.为了让它发挥作用,只有两件事要做:
更改value到innerHTML在document.getElementById("output").value
activeTab在manifest.json文件中添加权限
这是完整的源代码,共有三个文件.
{
"manifest_version": 2,
"name": "sample",
"description": "A sample extension to get the selected text",
"version": "1.0",
"icons": {
"16": "img/icon16.png",
"48": "img/icon48.png",
"128": "img/icon128.png"
},
"browser_action": {
"default_popup": "popup.html"
},
"permissions": [
"activeTab"
]
}
Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="popup.js"></script>
<title></title>
</head>
<body>
<div id="output"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
chrome.tabs.executeScript( {
code: "window.getSelection().toString();"
}, function(selection) {
document.getElementById("output").innerHTML = selection[0];
});
Run Code Online (Sandbox Code Playgroud)
你原来的方法是正确的(可能取自这个问题)。
它有两个问题:
不允许内联脚本 ( <script>...</script>) ;它可以通过将代码放入单独的文件(例如.popup.js
您需要访问内容脚本注入页面的权限;在您的特定情况下,有一个特定的权限,"activeTab"它以透明且轻松的方式进行,没有安全警告。当您的扩展被调用时(通过单击按钮),您可以访问当前选项卡。
解决了这些问题后,您的“直接”方法就可以发挥作用。
顺便说一下,以后要调试此类问题,您需要检查弹出页面。
至于你自己的答案,你把事情过于复杂化了。
在这种特殊情况下,您不需要事件页面;您的弹出窗口可以呼叫executeScript和收听消息。在某些情况下,您确实需要它,特别是当您无法保证内容脚本发送消息时弹出窗口打开时;但在这里你可以保证。
假设您需要事件页面,请考虑不要使用getBackgroundPage调用其中的方法 - 它与代码紧密耦合;您可以改为发送消息。sendResponse可用于将结果传回,甚至可以异步传回。
最后,您的架构对于content.js. 它仅在附加到目标页面的特殊上下文中(而不是在扩展上下文中)执行它的一个副本。
| 归档时间: |
|
| 查看次数: |
5306 次 |
| 最近记录: |