繁体   English   中英

如何从 Firefox 扩展发送 POST 请求?

[英]How to send a POST request from a Firefox extension?

我想从 Firefox 扩展向 Web 服务器发送 POST 请求。

我发现这个例子可以发送 POST 请求; https://developer.mozilla.org/en/Creating_Sandboxed_HTTP_Connections#HTTP_notifications

但我无法让它工作。

我目前有这样的代码;

    var ioService = Components.classes["@mozilla.org/network/io-service;1"]
                              .getService(Components.interfaces.nsIIOService);
var uri = ioService.newURI("http://www.google.com", null, null);
gChannel = ioService.newChannelFromURI(uri);

postData = "a=1&b=2&c=3";

var inputStream = Components.classes["@mozilla.org/io/string-input-stream;1"]
    .createInstance(Components.interfaces.nsIStringInputStream);

inputStream.setData(postData, postData.length);

var uploadChannel = gChannel.QueryInterface(Components.interfaces.nsIUploadChannel);

uploadChannel.setUploadStream(inputStream, "application/x-www-form-urlencoded", -1);
uploadChannel.requestMethod = "POST";
uploadChannel.open();

但我收到有关“无法修改 WrappedNative 的属性”的错误消息

如何使用 XMLHttpRequest 对象。 外延开发没有同源政策

我使用以下代码来测试 URL 是否存在:

if( typeof XMLHttpRequest == "undefined" ){
        var req = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
                            .createInstance();
}
else{
        var req = new XMLHttpRequest();
}
try{
    req.open( "GET", "https://" + request.URI.host + request.URI.path );
    var timeOutID = httpNowhere._getWindow().setTimeout(function () { 
        req.abort();
        Services.prompt.alert(null,"Info","nok "+ "https://" + request.URI.host 
                                                + request.URI.path );
    }, (redirectTimer));

    req.onreadystatechange = function (e) {

            if (req.readyState==4){
                Services.prompt.alert(null,"Info","ok "+ "https://" + request.URI.host 
                                                       + request.URI.path );
                req.abort();
            }
        }
    req.send( null );

} catch (err) {
Services.prompt.alert(null,"Info",err);
}

requestMethod 是nsIHttpChannel上的一个属性,因此您需要先调用 gChannel 上的 QueryInterface 才能设置它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM