- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试制作一个 chrome 扩展来替换当前 <textarea>
中输入的最后一个词当用户做出某个 keydown
事件火灾。所以我已经尝试过了,但它并没有真正起作用。
这是我的扩展的文件:
我的分机的 manifest.json
:
{
"name": "Test",
"description": "test",
"version": "0.0.1",
"permissions": [
"activeTab"
],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"browser_action": {
"default_title": "replace test"
},
"manifest_version": 2
}
它的 background.js
:
chrome.tabs.executeScript(null, {file: "content_script.js"});
及其content_script.js
:
document.onkeydown = replacePrevWord;
// Azerty: Ctrl + ²
// Qwerty: Ctrl + '
function KeyPress(e) {
var evtobj = window.event? event : e
if (evtobj.keyCode == 222 && evtobj.ctrlKey)
return true;
}
function getCaretPosition(ctrl) {
var CaretPos = 0; // IE Support
if (document.selection) {
ctrl.focus();
var Sel = document.selection.createRange();
Sel.moveStart('character', -ctrl.value.length);
CaretPos = Sel.text.length;
}
// Firefox support
else if (ctrl.selectionStart || ctrl.selectionStart == '0')
CaretPos = ctrl.selectionStart;
return (CaretPos);
}
function returnWord(text, caretPos) {
var index = text.indexOf(caretPos);
var preText = text.substring(0, caretPos);
if (preText.indexOf(" ") > 0) {
var words = preText.split(" ");
return words[words.length - 1]; //return last word
}
else {
return preText;
}
}
function replacePrevWord() {
if(KeyPress()){
var text = document.activeElement;
var caretPos = getCaretPosition(text)
var word = returnWord(text.value, caretPos);
if (word != null) {
text.value = text.value.replace(word,"replaced");
}
}
}
这在 JSFiddle ( http://jsfiddle.net/cyo646cr/3/ ) 上运行良好,但我不知道如何在 Chrome 扩展程序中执行此操作。
有什么想法吗?
谢谢。
最佳答案
注意:自 2021 年 1 月起,使用 Manifest V3与 chrome.scripting.executeScript()
和 scripting
许可并移动 <all_urls>
至 host_permissions
而不是使用已弃用的 chrome.tabs.executeScript()
与 tabs
许可。
您没有正确注入(inject)脚本。说起来容易,因为调用这条简单的线
chrome.tabs.executeScript(null, {file: "content_script.js"});
在你的background.js
将导致仅在当前选项卡中一次注入(inject)脚本(因为未指定 tabId)。因此,您的脚本只会在您打开的第一个标签页中针对 Google Chrome 的每个 session 运行一次。
看看the documentation for chrome.tabs.executeScript
.
要解决这个问题,您有两个选择:
"content_scripts"
在你的字段 manifest.json
因此它将被注入(inject)任何匹配模式的页面。chrome.tabs.onUpdated.addListener
添加监听器方法并将脚本注入(inject)选项卡。声明 "content_scripts"
在你的字段 manifest.json
像这样:
...
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content_script.js"],
"run_at": "document_idle",
"all_frames": true
}
],
...
现在您的内容脚本将被注入(inject)每个页面(因为 "<all_urls>"
将匹配所有页面)和页面的所有框架。您可以找到有关 "content_scripts"
的有用信息here .
请求 chrome.tabs
的权限API 和您想要在 manifest.json
中的 URL :
...
"permissions": [
"activeTab",
"tabs",
"<all_urls>"
]
...
在你的background.js
, 添加监听器 chrome.tabs.onUpdated
,它将在每个选项卡更新(即 url 更新)时触发,并使用 chrome.tabs.executeScript
注入(inject)您的脚本,像这样:
chrome.tabs.onUpdated.addListener(function(tabID, info, tab) {
chrome.tabs.executeScript(tabID, {file: "content_script.js"});
});
关于javascript - Chrome 扩展替换当前文本区域中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26335530/
我想对一个字符串执行搜索和替换,比如 password。 正如您从问题中了解到的那样,替换后的字符串应变为 sdvvzrug。 但不幸的是,下面的代码输出bbbbcaab: $search = ran
我正在使用 futurize --stage2它应用了许多源代码转换以使代码 python2 和 python3 兼容。其中一个修复是所有分区 a/b 都替换为 old_div(a/b),我想避免这种
我正在使用 RStudio,但我在控制台上的输出被截断了。我找不到如何停止截断(我尝试搜索 ?options 以及在谷歌上搜索的时间比我想承认的要长)。 编辑:我向大家道歉!我最初的长名称为“This
我有一个 fragment 堆栈,我在其中使用替换和相加。添加或替换我的 fragment 的代码(在我的 Activity 中)如下 private fun addFragment(fragment
我在一个数组中插入了一些字符串,但在我这样做之前,我想按照主题所说的去做。只用 %20 替换空格,我这样做: Name.push(linkText.replace(" ", "%20")); 但是我如
我正在尝试编译和测试我在网上看到的代码 Expanding an IP add 。但是,当我尝试编译它时,我收到有关 StringBuilder 替换方法的错误。它说: IPadd.java:52:
我正在尝试使用 dplyr 的最新功能重写我的部分代码,方法是将 data.frame() 替换为 data_frame() 和 cbind() 与 bind_cols(): library(rgeo
我最近偶然发现了 replace()和 "[ x.tst s.tst s.tst [,1] [,2] [,3] [1,] 0 0 0
我一直想知道,如何在给定的参数内进行替换。 如果你有这样的一行: 123,Hello,World,(I am, here), unknown 你想更换 World与 Foobar那么这是一个简单的任务
如何转义字符串中的双引号?例如, input: "Nobody" output: \"Nobody\" 我尝试过这样的操作,但不起作用: String name = "Nobody"; name.r
我正在做类似的事情: SQL sql sQl SqL var ps = document.getElementsByTagName('p'); for(var i = 0; i 但它不会替换文本。
我正在尝试用 \" 替换所有 " 并用 JSON 解析字符串,但浏览器抛出错误 SyntaxError: JSON Parse error: Unrecognized token '\'. 下面是代码
大家好,在这里挣扎...... 是否可以将第一个正斜杠之间的任何内容替换为“”,但保留其余部分? 例如var 将是 string "/anything-here-this-needs-to-be-re
在下面的代码中,JavaScript 替换函数中的 alert(a) 将提醒匹配的字符串,在本例中,将是 {name} 和 {place}。 这按照文档 javascript docs 的描述工作,即
+-----------------------------+ | tables | +-------------------
我正在尝试用\"替换包含 "的字符串,下面是我尝试过的程序 String s="\"/test /string\""; s = s.replaceAll("\"", "\\\"");
var text = "a's ..a's ...\"... "; text = convert(text); function convert( text ) { var n = text
我正在尝试使用 JavaScript 中的替换函数,但有一个问题。 strNewDdlVolCannRegion = strNewDdlVolCannRegion.replace(/_existing
好吧,首先我对我的上一篇文章感到非常抱歉,但我真的需要帮助,我会把我真正想要的东西放在一个更清晰的代码中。我不擅长 javascript,所以希望你能帮助我。
我正在写一张纸条,遇到了障碍。可能有更有效的方法来执行此操作,但我对 Python 还很陌生。我正在尝试创建用户生成的 IP 地址列表。我正在使用 print 来查看生成的值是否正确。当我运行此代码时
我是一名优秀的程序员,十分优秀!