javascript - 如何在 Firefox 插件 sdk 扩展中使用来自 main.js 的 XMLHttpRequest。 (或类似的东西)

标签 javascript firefox firefox-addon firefox-addon-sdk

<分区>

我有一个 Firefox 扩展需要检查 onUnload 事件。基本上我想在用户禁用扩展程序时向我的服务器发送一条消息。

我尝试做的是向我的内容脚本之一发送一条消息,然后它会调用 XMLHttpRequest。这适用于扩展程序触发的任何其他事件,但看起来内容脚本甚至在消息传递之前就已卸载。

主.js

这是来自 main.js 脚本的代码:

exports.onUnload = function(reason) {
    //unloadWorker comes from a PageMod 'onAttach: function(worker){}'
    //That is called every time a page loads, so it will a recent worker.
    if(unloadWorker != null) { 
        unloadWorker.port.emit("sendOnUnloadEvent", settings, reason);
    }
};

内容脚本

这是我附加到每个加载页面的内容脚本中的代码。

self.port.on("sendOnUnloadEvent", function(settings, reason) {
    console.log("sending on unload event to servers");
    settings.subid = reason;
    if(reason != "shutdown") {
        sendEvent(("on_unload"), settings);
    }
});

发送事件代码

最后,这里是发送事件代码,仅供引用,我最初计划如何使用 XMLHttpRequest:

sendEvent = function(eventName, settings) {

    if (!eventName) {
        eventName = "ping"; 
    }
    //Not the actual URL, but you get the idea.
    var url = 'http://example.com/sendData/?variables=value&var2=value2'

    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {

    }

    xhr.open("GET", url, true);
    xhr.send();
}

有没有办法使用 main.js 中的 XMLHttpRequest?

或者也许是一种触发 onUnload 事件的方法,但它是在扩展实际卸载之前触发的吗? (就像 beforeOnUnload 类型的事件)

最佳答案

从 main.js 发出网络请求的首选方法是使用模块 sdk/request 中的 Request 对象.

但是,Request只能进行异步请求,这意味着当函数结束时对象将超出范围,请求不会发生。

相反,您可以使用 sdk/net/xhr能够使用 XMLHttpRequest 并生成 synchronous GET request像这样卸载:

const {XMLHttpRequest} = require("sdk/net/xhr");
exports.onUnload = function(reason) {
    var url = 'http://mysite.com/sendData/?variables=value&var2=value2'
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url, false);
    xhr.send(null);
});

但请注意,sdk/net/xhr 被标记为不稳定且同步请求被阻塞且不受欢迎。

关于javascript - 如何在 Firefox 插件 sdk 扩展中使用来自 main.js 的 XMLHttpRequest。 (或类似的东西),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19818321/

相关文章:

javascript - document.forms[i][j].type 出现问题,返回未定义

javascript - Firefox 扩展 : Error calling executeScript on file but not code

javascript - 未捕获的语法错误 : Unexpected token < using Jsonp

javascript - 复选框在 gridview asp.net 中使用 Shift 键进行多项选择

javascript - 'chrome.extension.onRequest.addListener(function( )' don` t 运行其他函数

javascript - 在 Firefox 中获取 SVG <img> 的高度/宽度

firefox-addon - 在 Firefox 扩展中导入 Javascript 模块

javascript - ng-checked 在 AngularJS 中的单选按钮

css - Firefox 转换 : rotate breaks text color

asp.net-mvc - asp.net mvc 应用程序中的 SameSite 属性