javascript - 打开一个选项卡并在 firefox webextension 中向它发出 POST 请求

标签 javascript firefox-addon-webextensions

我尝试迁移我的 Firefox addon它将低级 SDK API 用于 WebExtension,并且在某些时候我想将 URL 编码的数据 POST 到新选项卡。

使用低级 API,可以通过以下代码实现:

const querystring = require('sdk/querystring');
let stringStream = Cc["@mozilla.org/io/string-input-stream;1"].createInstance(Ci.nsIStringInputStream);
stringStream.data = querystring.stringify(params); // params is a json data

let postData = Cc["@mozilla.org/network/mime-input-stream;1"].createInstance(Ci.nsIMIMEInputStream);
postData.addHeader("Content-Type", "application/x-www-form-urlencoded");
postData.addContentLength = true;
postData.setData(stringStream);

var tabBrowser = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator).getMostRecentWindow("navigator:browser").gBrowser;
var selectedTabIndex = tabBrowser.tabContainer.selectedIndex;
var newTab = tabBrowser.loadOneTab("https://myurl.com/", {
    inBackground: false,
    postData: postData
});
tabBrowser.moveTabTo(newTab, selectedTabIndex + 1);

但我还没有找到等效的 WebExtension。

是否可能或唯一的解决方案是创建一个表单并在js中提交?

最佳答案

您实际上需要发布到选项卡还是只显示响应?这将发布并得到您可以做某事的回复。确保您的 CORS header 也设置正确。

<meta http-equiv="Content-Security-Policy" content="default-src 'self' www.demo.com; script-src 'self'; img-src http: https: data:; style-src 'self' 'unsafe-inline'">

function ajax(url) {
    return new Promise(function(resolve, reject) {
        var xhr = new XMLHttpRequest();
        xhr.onload = function() {
            resolve(this.responseText);
        };
        xhr.onerror = reject;
        xhr.open('POST', url);
        xhr.send();
    });
}

ajax("www.demo.com/test.php?q=" + params).then(function(result) {
    //Do something with result
}).catch(function(err) {
      console.log("Error: " + err.message);
});

关于javascript - 打开一个选项卡并在 firefox webextension 中向它发出 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37138125/

相关文章:

javascript - 使用正则表达式替换 javascript 中的第 N 个单词

firefox - 是否可以在 Firefox 扩展中使用外部 js?例如来自 CDN 的 Jquery

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

javascript - 将 firefox-webextension 的按钮更改为 textString

java - 为什么 Selenium 找不到 XUL 按钮?

javascript - 使用 webpack 将 webextension manifest 与 typescript 捆绑在一起

javascript - jquery/.js 脚本的顺序

javascript - 动态客户关系管理 : How to simulate clicking out of a field with Javascript

javascript - 如何自定义电子邮件传输

javascript - 如何通过另一个元素检测鼠标悬停?