github ace 编辑器上的插入符位置
Caret position on github ace editor
我正在开发一个 chrome 扩展程序,我可以在 github 网络编辑器中插入文本。插入的文本应位于插入符号位置,我不知道如何获取它。
github编辑器,是一个王牌编辑器,有这个HTML代码:
<div class="commit-create">
<textarea id="blob_contents"
class="file-editor-textarea js-blob-contents js-code-textarea"
rows="35" name="value"
data-filename="README.md"
data-language="Markdown"
data-ace-mode="markdown"
data-allow-unchanged=""
data-test-id="blob-file-editor"
placeholder="Enter file contents here"
spellcheck="false"
autofocus>
Line 1
Line 2
Line 3
Line 4
</textarea>
</div>
在我的 manifest.json 中,我包含了 ace.js(从 here 获得,我希望它是正确的 .js 文件)
...
"content_scripts":
[{
"matches": ["*://*.github.com/*/edit/*"],
"js": ["ace.js", "content.js"]
}],
...
这是用户提供的 javascript 代码:
chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse)
{
...
var editor = document.querySelector(".ace_editor").env.editor;
var cursor = editor.selection.getCursor() // returns object like {row:1 , column: 4}
editor.insert("text") // insert string at cursor
...
}
我收到这个错误
Error in event handler for runtime.onMessage: TypeError: Cannot read property 'editor' of undefined
=== 编辑 1 ====
感谢一位用户,我取得了一点进步。该代码适用于 chrome 控制台,但不适用于 content.js,这可能是一个安全问题,我不明白为什么。
你需要使用 ace api 才能做到
var editor = document.querySelector(".ace_editor").env.editor;
var cursor = editor.selection.getCursor() // returns object like {row:1 , column: 4}
editor.insert("text") // insert string at cursor
感谢指导我找到解决方案的用户,
这是我所做的:
使用aceAPI,下载js文件:https://github.com/ajaxorg/ace-builds/blob/master/src/ace.js
manifest.json:
"content_scripts":
[{
"matches": ["*://*.github.com/*/edit/*"],
"js": ["ace.js", "jquery.js", "content.js"]
}],
由于安全问题,我无法直接获取ace编辑器对象,所以我需要注入这个脚本:
function InsertToAceEditor(message)
{
var scriptContent = "document.querySelector('.ace_editor').env.editor.insert('" + message+ " ')";
var script = document.createElement('script');
script.id = 'tmpScript';
script.appendChild(document.createTextNode(scriptContent));
document.body.appendChild(script);
$("#tmpScript").remove();
}
如用户所指,解释如下:
由于安全策略指令 'unsafe-inline' 清单 v3
,这不再有效
我正在开发一个 chrome 扩展程序,我可以在 github 网络编辑器中插入文本。插入的文本应位于插入符号位置,我不知道如何获取它。
github编辑器,是一个王牌编辑器,有这个HTML代码:
<div class="commit-create">
<textarea id="blob_contents"
class="file-editor-textarea js-blob-contents js-code-textarea"
rows="35" name="value"
data-filename="README.md"
data-language="Markdown"
data-ace-mode="markdown"
data-allow-unchanged=""
data-test-id="blob-file-editor"
placeholder="Enter file contents here"
spellcheck="false"
autofocus>
Line 1
Line 2
Line 3
Line 4
</textarea>
</div>
在我的 manifest.json 中,我包含了 ace.js(从 here 获得,我希望它是正确的 .js 文件)
...
"content_scripts":
[{
"matches": ["*://*.github.com/*/edit/*"],
"js": ["ace.js", "content.js"]
}],
...
这是用户提供的 javascript 代码:
chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse)
{
...
var editor = document.querySelector(".ace_editor").env.editor;
var cursor = editor.selection.getCursor() // returns object like {row:1 , column: 4}
editor.insert("text") // insert string at cursor
...
}
我收到这个错误
Error in event handler for runtime.onMessage: TypeError: Cannot read property 'editor' of undefined
=== 编辑 1 ====
感谢一位用户,我取得了一点进步。该代码适用于 chrome 控制台,但不适用于 content.js,这可能是一个安全问题,我不明白为什么。
你需要使用 ace api 才能做到
var editor = document.querySelector(".ace_editor").env.editor;
var cursor = editor.selection.getCursor() // returns object like {row:1 , column: 4}
editor.insert("text") // insert string at cursor
感谢指导我找到解决方案的用户, 这是我所做的:
使用aceAPI,下载js文件:https://github.com/ajaxorg/ace-builds/blob/master/src/ace.js
manifest.json:
"content_scripts":
[{
"matches": ["*://*.github.com/*/edit/*"],
"js": ["ace.js", "jquery.js", "content.js"]
}],
由于安全问题,我无法直接获取ace编辑器对象,所以我需要注入这个脚本:
function InsertToAceEditor(message)
{
var scriptContent = "document.querySelector('.ace_editor').env.editor.insert('" + message+ " ')";
var script = document.createElement('script');
script.id = 'tmpScript';
script.appendChild(document.createTextNode(scriptContent));
document.body.appendChild(script);
$("#tmpScript").remove();
}
如用户所指,解释如下:
由于安全策略指令 'unsafe-inline' 清单 v3
,这不再有效