【发布时间】:2017-01-05 16:02:52
【问题描述】:
我正在为文本编辑器写一个WebExtension。当用户单击一个按钮时,format 编辑器会触发一个 ajax 请求,然后返回格式化的文本。我需要我的插件来监听 textarea 的变化。
我尝试过使用onchange 或oninput,但是当收到响应时,这些事件不会触发。 ajax 响应用这个函数设置正文(不是我自己的):
function setBody(text) {
$(opts.codeEl).val(text); // opts.codeEl is the textarea in question
}
ajax 响应如下所示:
{"Body":"Hello World","Error":""}
是否可以处理来自 WebExtension 内容脚本 的 ajax 请求/响应?以某种方式监听 DOM 中 textarea 的 val 的变化?我可以收听并拦截响应吗?
在网站的 javascript 代码中发送和接收 ajax 请求,与我正在为编辑器使用的内容脚本(WebExtension 代码)隔离。请求是这样的
function fmt() {
loading();
var data = {"body": body()};
if ($(opts.fmtImportEl).is(":checked")) {
data["imports"] = "true";
}
$.ajax("/fmt", {
data: data,
type: "POST",
dataType: "json",
success: function(data) {
if (data.Error) {
setError(data.Error);
} else {
setBody(data.Body);
setError("");
}
}
});
}
编辑
注入ajaxComplete 处理程序:
$(document).ajaxComplete(function(event, jqxhr, options) {
if(options.url === "/fmt") {
console.log("fmtted");
$('#code').change();
}
});
当收到ajax 响应时,将调用Into 目标站点标头。但是,当尝试使用注入脚本修改DOM 时(例如,出于安全原因,通过调用change() 或onchange(),它会引发Error: Permission denied to access property "apply" 错误。
【问题讨论】:
-
您是否要检查服务器对
$.ajax()呼叫或change事件textarea的响应? -
1.这个文本编辑器是否提供自己的 js API 和事件订阅? 2.您可能必须使用DOM-injected scriptspoof
valmethod -
@guest271314 检查
change事件 -
@wOxxOm 是的......我想。我现在要研究这些链接
-
@guest271314 总的来说,我对 javascript 有很多不确定,但是编辑 textarea 并不会改变 DOM AFAIK,所以
MutationObservers不会注册任何东西
标签: javascript ajax google-chrome-extension content-script firefox-addon-webextensions