在 emit.port 中为 Firefox 扩展传递元素
Pass element in emit.port for Firefox Extension
我需要将元素从一个函数传递到另一个函数,但只能在 Web 服务 (AJAX) 调用完成后进行。
内容脚本(popup.js):
function runThis(){
var elem = $(".mainelem");
var objDetails = {
element : elem
}
self.port.emit("runCall", objDetails);
self.port.on("callComplete", function(response){
$(response.element).text("New text entered.");
});
}
主要 js(main.js):
main_panel.port.on("runCall", function(obj){
main_panel.port.emit("callComplete", obj);
});
html 文件(popup.html):
<div class="mainelem"></div>
但它不附加文本。此外,如果尝试将控制台放在 port.on("callComplete") 的函数中,它会控制台一个值,如:
{"0":{"query111107803796615637436":15},"context" :{ "query111107803796615637436":15},"length":1}
有人可以帮我解决如何传递元素吗?或者如果我试图以错误的方式获取元素?
您不能发射 DOM 个对象。 You can emit only serializeable values.
function runThis(){
var elem = document.querySelector(".mainelem");
var objDetails = {
element : elem.textContent; // Emit string, for example.
}
self.port.emit("runCall", objDetails);
self.port.on("callComplete", function(response){
elem.textContent = "New text entered.";
});
}
我需要将元素从一个函数传递到另一个函数,但只能在 Web 服务 (AJAX) 调用完成后进行。
内容脚本(popup.js):
function runThis(){
var elem = $(".mainelem");
var objDetails = {
element : elem
}
self.port.emit("runCall", objDetails);
self.port.on("callComplete", function(response){
$(response.element).text("New text entered.");
});
}
主要 js(main.js):
main_panel.port.on("runCall", function(obj){
main_panel.port.emit("callComplete", obj);
});
html 文件(popup.html):
<div class="mainelem"></div>
但它不附加文本。此外,如果尝试将控制台放在 port.on("callComplete") 的函数中,它会控制台一个值,如:
{"0":{"query111107803796615637436":15},"context" :{ "query111107803796615637436":15},"length":1}
有人可以帮我解决如何传递元素吗?或者如果我试图以错误的方式获取元素?
您不能发射 DOM 个对象。 You can emit only serializeable values.
function runThis(){
var elem = document.querySelector(".mainelem");
var objDetails = {
element : elem.textContent; // Emit string, for example.
}
self.port.emit("runCall", objDetails);
self.port.on("callComplete", function(response){
elem.textContent = "New text entered.";
});
}