[英]Listen in Content Script for when AJAX response changes textarea val
我正在為文本編輯器編寫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 Content Script處理此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()
,將引發Error: Permission denied to access property "apply"
錯誤。
jQuery .val(value)
確實調度了change
事件。 調用.change()
或.trigger("change")
。
如果你不知道什么時候setBody
將被調用,您可以使用.ajaxStop()
調用.change()
在$(opts.codeEl)
當最后$.ajax()
調用完成。
$(function() { let opts = { codeEl: document.querySelector("textarea") } $(opts.codeEl).on("change", function(event) { console.log("changed") }); function setBody(text) { $(opts.codeEl).val(text) } let url = URL.createObjectURL( new Blob([ JSON.stringify({ "Body": "Hello World", "Error": "" }) ], { type: "application/json" }) ); $.get(url) .then(function(data) { URL.revokeObjectURL(url); setBody(JSON.stringify(data)) }); $(document).ajaxComplete(function(event, jqxhr, options) { if (options.url === url) { console.log("ajaxStop"); $(opts.codeEl).change(); // trigger `change` event } }); })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> </script> <textarea></textarea>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.