Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在内容脚本中侦听AJAX响应何时更改textarea val_Javascript_Ajax_Google Chrome Extension_Content Script_Firefox Addon Webextensions - Fatal编程技术网

Javascript 在内容脚本中侦听AJAX响应何时更改textarea val

Javascript 在内容脚本中侦听AJAX响应何时更改textarea val,javascript,ajax,google-chrome-extension,content-script,firefox-addon-webextensions,Javascript,Ajax,Google Chrome Extension,Content Script,Firefox Addon Webextensions,我正在为一个文本编辑器编写一个WebExtension。当用户单击一个按钮时,format编辑器触发一个ajax请求,然后返回格式化文本。我需要我的插件来监听文本区域中的更改 我尝试过使用onchange或oninput,但是当收到响应时,这些事件不会被触发。ajax响应使用此函数设置正文(不是我自己的): ajax响应如下所示: {“Body”:“Hello World”,“Error”:“} 是否可以从Web扩展内容脚本处理此ajax请求/响应?以某种方式侦听DOM中textarea的val

我正在为一个文本编辑器编写一个
WebExtension
。当用户单击一个按钮时,
format
编辑器触发一个ajax请求,然后返回格式化文本。我需要我的插件来监听
文本区域中的更改

我尝试过使用
onchange
oninput
,但是当收到响应时,这些事件不会被触发。ajax响应使用此函数设置正文(不是我自己的):

ajax
响应如下所示:

{“Body”:“Hello World”,“Error”:“}

是否可以从Web扩展内容脚本处理此ajax请求/响应?以某种方式侦听DOM中
textarea
val
中的更改?我能听到并截获回应吗

ajax请求在网站的javascript代码中发送和接收,与我正在为编辑器使用的内容脚本(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
响应时,将调用目标站点标题。但是,当尝试使用注入脚本修改
DOM
时(例如,通过调用
change()
onchange()
),出于安全原因,会引发
错误:拒绝访问属性“apply”
的权限错误。

.val(值)
是否分派
更改
事件。调用
.change()
触发器(“更改”)

如果您不知道何时调用
setBody
,您可以使用
.ajaxStop()
$(opts.codeEl)
上调用
.change()
,直到最后一次
$.ajax()
调用完成

$(函数(){
让选项={
codeEl:document.querySelector(“textarea”)
}
$(opts.codeEl).on(“更改”,函数(事件){
console.log(“已更改”)
});
函数(文本){
$(opts.codeEl).val(文本)
}
让url=url.createObjectURL(
新斑点([
JSON.stringify({
“身体”:“你好,世界”,
“错误”:”
})
], {
类型:“application/json”
})
);
$.get(url)
.then(功能(数据){
revokeObjectURL(URL);
setBody(JSON.stringify(数据))
});
$(文档).ajaxComplete(函数(事件、jqxhr、选项){
如果(options.url==url){
控制台日志(“ajaxStop”);
$(opts.codeEl).change();//触发'change'事件
}
});
})


您是否试图检查服务器对
$.ajax()的响应
调用或
更改
文本区域的事件
1.此文本编辑器是否提供自己的js API和事件订阅?2.您可能需要使用@guest271314检查
更改
event@wOxxOm是的…我想。我会调查那些链接now@guest271314总的来说,我对javascript有很多不确定的地方,但是编辑文本区域不会更改DOM AFAIK,因此
mutationObserver
不会注册anything@guest271314因此,
ajaxComplete
将在ajax请求通过时触发?即使ajax请求以外来代码发送和接收?@Nevermore“外来代码”是什么意思?您是否可以在问题中包含所有相关的
javascript
?@Nevermore,是的,它将始终执行,但您只需将旧的textarea值与当前值进行比较。此外,您还必须在一个@guest271314中钩住ajaxComplete“我更新了我的问题,指定ajax调用是在我的内容脚本中的一个独立脚本中进行的——我认为wOxxOm是有问题的,但我需要先了解您编写的代码,然后才能真正了解“钩子”调用
ajaxComplete
函数意味着…基本上,我需要将您上面编写的侦听器注入到独立脚本中?如果您可以控制
html
文档
,您可以在
文档
处插入答案的
.ajaxComplete()
部分。或者,简单地说,就是链入
.change()
.val()
。您也可以尝试从扩展名使用。
  $(document).ajaxComplete(function(event, jqxhr, options) {
    if(options.url === "/fmt") {
      console.log("fmtted");
      $('#code').change();
    }
  });